背景
项目已经在使用mybatisPlus,但是基本使用还是主要基本的mybatis功能加上自动生成功能。一些可以通过mybatisPlus 插件实现,减少开发成本。比如逻辑删除字段、创建修改人、更新时间等。
逻辑删除
/**
* 逻辑删除 0未删除1已删除
*/
@TableLogic
private Integer deleted;
//仍然通过这种方式
eq(BasicHteAgent::getDeleted, 0))
1.在代码中,发现部分表没有这个字段,可以加上。变成同意的规范
2.上面这个字段虽然已经加了,但是还是通过代码逻辑判断。可以直接修改注解即可
@TableLogic(value = "0",delval = "1")
private Integer deleted;
更新时间、插入时间、修改人、创建人
package com.yumei.cloud.database.mybatisplus;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.util.Date;
@Component
public class CustomMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
Date date = new Date();
metaObject.setValue("createTime", date);
metaObject.setValue("updateTime", date);
// TODO: 2023/4/13 需要修改对应的包引用关系,目前公共模块未能拿到对应的用户上下文引用
metaObject.setValue("creator", AuthUserContext.get().getAccount());
metaObject.setValue("modifier", AuthUserContext.get().getAccount());
}
@Override
public void updateFill(MetaObject metaObject) {
metaObject.setValue("updateTime", date);
// TODO: 2023/4/13 需要修改对应的包引用关系,目前公共模块未能拿到对应的用户上下文引用
metaObject.setValue("modifier", AuthUserContext.get().getAccount());
}
}
数据库实体类,实现对应的父类即可
package com.yumei.cloud.database.mybatisplus;
import com.baomidou.mybatisplus.annotation.*;
import java.io.Serializable;
import java.util.Date;
/**
* 数据库通用字段
*/
public class CommonPO implements Serializable {
/**
* 主键di 自增
*/
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
private Date createTime;
/**
* 修改时间
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date modifyTime;
/**
* 创建用户
*/
@TableField(fill = FieldFill.INSERT)
private String creator;
/**
* 修改用户
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private String modifier;
/**
* 是否删除 0否1是
*/
@TableLogic(value = "0",delval = "1")
private Integer deleted;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public Date getModifyTime() {
return modifyTime;
}
public void setModifyTime(Date modifyTime) {
this.modifyTime = modifyTime;
}
public String getCreator() {
return creator;
}
public void setCreator(String creator) {
this.creator = creator;
}
public String getModifier() {
return modifier;
}
public void setModifier(String modifier) {
this.modifier = modifier;
}
public Integer getDeleted() {
return deleted;
}
public void setDeleted(Integer deleted) {
this.deleted = deleted;
}
}
代码已经提交到git,细节点需要优化,代码已经提交 commit细节 其中获取用户上下文的细节需要再进行处理。
- 后续只需要继承CommonPO即可。(这块可以在自动生成类模板上加上就可)
其他拓展
mybatis-plus 插件实现的逻辑想要探究的可以翻下源码,看下细节。很多功能都可以通过插件实现,比如多租户,限制单条查询数量等。
简单的说就是在Sql 处理前,重写SQL.
额外要说的点,就是关于安全合规的问题。基于国家法规的要求,用户的个人信息以及敏感字段都需要做加密处理,我们基于插件,实现一个加解密方法,在插入的时候,进行加密,读取的时候进行解密。