本文已参与「新人创作礼」活动,一起开启掘金创作之路
sql执行打印
我们在进行后端开发的时候,往往需要打印执行的sql。这里我们选择官网推荐的p6spy进行打印
安装依赖
在pom.xml中的dependencies中添加代码如下
<!-- p6spy -->
<dependency>
<groupId>p6spy</groupId>
<artifactId>p6spy</artifactId>
<version>3.9.1</version>
</dependency>
新建配置文件
我们在resources下新建spy.properties文件。内容如下
#3.2.1以上使用
modulelist=com.baomidou.mybatisplus.extension.p6spy.MybatisPlusLogFactory,com.p6spy.engine.outage.P6OutageFactory
# 自定义日志打印
logMessageFormat=com.baomidou.mybatisplus.extension.p6spy.P6SpyLogger
#日志输出到控制台
appender=com.baomidou.mybatisplus.extension.p6spy.StdoutLogger
# 使用日志系统记录 sql
#appender=com.p6spy.engine.spy.appender.Slf4JLogger
# 设置 p6spy driver 代理
deregisterdrivers=true
# 取消JDBC URL前缀
useprefix=true
# 配置记录 Log 例外,可去掉的结果集有error,info,batch,debug,statement,commit,rollback,result,resultset.
excludecategories=info,debug,result,commit,resultset
# 日期格式
dateformat=yyyy-MM-dd HH:mm:ss
# 实际驱动可多个
#driverlist=org.h2.Driver
# 是否开启慢SQL记录
outagedetection=true
# 慢SQL记录标准 2 秒
outagedetectioninterval=2
设置p6spy驱动
这里我们设置application.yml如下所示
server:
port: 1001
spring:
mvc:
pathmatch:
matching-strategy: ant_path_matcher
datasource:
driver-class-name: com.p6spy.engine.spy.P6SpyDriver
url: jdbc:p6spy:mysql://???:3306/????useUnicode=true&characterEncoding=UTF-8&useSSL=false
username: root
password: supporter
mybatis-plus:
global-config:
db-config:
logic-delete-field: del_flag # 全局逻辑删除的实体字段名
logic-delete-value: 1 # 逻辑已删除值(默认为 1)
logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
这里和mysql的配置大致相同,只有driver和url有所不同
验证
我们直接重启项目,访问add方法即可看到在打印台中打印了sql
乐观锁
先解释一下乐观锁的意思:对所有的数据都信任,只在更新的时候加锁。我们要实现乐观锁其实很简单就是添加一个版本号。我来解释一下为什么这样会保证数据的准确性。我们设置完版本号之后,如果执行update方法会在后边添加一个版本号的条件,也就是最终的sql为:update table_name set a=?,version_no= version_no+1 where id=? and version_no = 当前版本
引入乐观锁
其实只需要在我们的版本控制字段上添加@Version注解就行了
注意
此处必须查询出版本号,否则不会更新
自动填充
我们在之前的文章设置了一些通用的字段,但是在编写测试案例的时候如果不设置值的话,对应的属性就是空,我们这里集成官网的文档进行设置默认值的功能
编写配置文件
在code.liang.top.admin.boot.config.mybatis下新建ProjectMetaObjectHandler文件内容如下
package code.liang.top.admin.boot.config.mybatis;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
/**
* @author lmh
* @version 1.0
* @description: 项目 MetaObjectHandler
*/
@Slf4j
@Component
public class ProjectMetaObjectHandler implements MetaObjectHandler {
/**
* insert 时填充
*
* @param metaObject metaObject
*/
@Override
public void insertFill(MetaObject metaObject) {
this.strictInsertFill(metaObject, "createId", String.class, "createId");
this.strictInsertFill(metaObject, "createName", String.class, "createName");
this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());
}
/**
* insert 时填充
*
* @param metaObject metaObject
*/
@Override
public void updateFill(MetaObject metaObject) {
this.strictInsertFill(metaObject, "updateId", String.class, "updateId");
this.strictInsertFill(metaObject, "updateName", String.class, "updateName");
this.strictInsertFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
}
}
我们现在直接重启项目然后调用add与update方法即可自动填充数据
结语
我们本篇文章集成了乐观锁、自动填充、以及sql打印的功能,明天我们准备集成druid监控sql,mybatis plus代码生成器
本文所有代码已上传的gitee,欢迎有兴趣的掘友们startgitee.com/liangminghu…
欢迎关注我的掘金账号:juejin.cn/user/261290…
下期预告:druid监控sql,mybatis plus代码生成器集成