1. 自动填充
在项目中有一些属性,比如常见的创建时间和更新时间可以设置为自动填充。
1.1 实例
需求: 将创建时间和更新时间设置为自动填充, 这样每次插入数据时可以不用理会这两个字段
1.1.1 在数据库增加字段
默认开启驼峰映射 createTime --> create_time
1.1.2 实体类增加字段
//分别指定为插入时自动填充和修改时自动填充
@TableField(fill = FieldFill.INSERT)
private Date createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
1.1.3 编写自动填充处理器,指定填充策略
//新增时创建时间和修改时间是一样的,因此同步自动填充
//修改时只要自动填充修改时间即可
@Component
public class MyMetaHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
setFieldValByName("createTime",new Date(),metaObject);
setFieldValByName("updateTime",new Date(),metaObject);
}
@Override
public void updateFill(MetaObject metaObject) {
setFieldValByName("updateTime",new Date(),metaObject);
}
}
1.1.4 数据库相关配置
1.1.4.1 时区
先用select now();检查时区是否正确, 否则修改
1.1.4.2 url
datasource的url也声明插入的时区
1.1.5 单元测试
@Test
void testFill(){
User user = new User();
user.setName("wang");
user.setAge(35);
user.setEmail("wang@powernode.com");
user.setGender(GenderEnum.MAN);
userMapper.insert(user);
}
可以看到MP自动新增了两个插入字段.
2. SQL执行的语句和速度分析
可以使用MybatisPlus提供的SQL分析打印的功能,来获取SQL语句执行的时间。
2.1 添加依赖
1】由于该功能依赖于p6spy组件,所以需要在pom.xml中先引入该组件
<dependency>
<groupId>p6spy</groupId>
<artifactId>p6spy</artifactId>
<version>3.9.1</version>
</dependency>
2.2 修改application.yaml
将驱动和url修改
spring:
datasource:
driver-class-name: com.p6spy.engine.spy.P6SpyDriver
#之前之后
# url: jdbc:mysql://localhost:3306/study
url: jdbc:p6spy:mysql://localhost:3306/study
2.3 在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