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 编写自动填充处理器,指定填充策略
//新增时创建时间和修改时间是一样的,因此同步自动填充//修改时只要自动填充修改时间即可@Componentpublic class MyMetaHandler implements MetaObjectHandler {@Overridepublic void insertFill(MetaObject metaObject) {setFieldValByName("createTime",new Date(),metaObject);setFieldValByName("updateTime",new Date(),metaObject);}@Overridepublic 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/studyurl: 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