在上一篇文章讲述了如何使用Mybatis-plus自动生成代码,生成的代码具有单表操作数据库的能力,节约了开发时间。然后讲述了如何在Spring Boot中整合Mybatis-Plus。这篇文章讲述如何使用Mybatis-Plus的增强功能:自动填充功能和查询分页功能。
Mybatis-Plus自动填充功能
在Matrix-web项目中,数据库的所有表都有四个公共字段,即create_by、create_time、update_by、update_time ,即存储了表数据的创建人、创建时间、更新时间、更新人。在对表插入一条数据的时候,需要自动填充四个字段,对表数据更新操作,需要更新后2个字段。但是如果在每个插入和更新业务逻辑里面, 手动的填充这四个字段,增加了工作量。幸好mybatis-plus有一个自动更新的插件。
实现自动填充功能很简单,只需要实现MetaObjectHandler接口和实现填充逻辑,并把它注入到spring ioc容器中即可。其中下面的代码UserUtils.getCurrentUserWithDefault();即获取当前请求的用户,在权限那一篇文章有讲到过,在这里不再重复;然后加上注解@Component注入到Spring ioc容器里面去。
@Component
@Slf4j
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
log.info("start insert fill ....");
Object createBy = getFieldValByName("createBy", metaObject);
Object updateBy = getFieldValByName("updateBy", metaObject);
Object createTime = getFieldValByName("createTime", metaObject);
Object updateTime = getFieldValByName("updateTime", metaObject);
if (createBy == null) {
this.setFieldValByName("createBy", UserUtils.getCurrentUserWithDefault(), metaObject);//版本号3.0.6以及之前的版本
}
if (updateBy == null) {
this.setFieldValByName("updateBy", UserUtils.getCurrentUserWithDefault(), metaObject);
}
if (createTime == null) {
this.setFieldValByName("createTime", new Date(), metaObject);
}
if (updateT