导入MP的依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.2</version>
</dependency>
对应表的实体配置:
删除标记字段使用注解:@TableLogic
通用的新增人,新增时间字段使用注解:@TableField(fill = FieldFill.INSERT)
通用的更新人,更新时间字段使用注解:@TableField(fill = FieldFill.UPDATE)
@TableName(value ="user")
@Data
public class User implements Serializable {
@TableId(type = IdType.AUTO)
private Long id;
private Long userId;
private String userName;
private Integer cityInfo;
@TableLogic
private Integer isDelete;
@TableField(fill = FieldFill.INSERT)
private Integer createBy;
@TableField(fill = FieldFill.INSERT)
private Date createTime;
@TableField(fill = FieldFill.UPDATE)
private Date updateTime;
@TableField(fill = FieldFill.UPDATE)
private Integer updateBy;
@TableField(exist = false)
private static final long serialVersionUID = 1L;
}
新增配置类,用于配置通用新增与更新字段,如果未赋值那么传递哪些值(这里为了方便我把值暂时写为0,1,实际中请切合实际情况赋值)。
@Slf4j
@Configuration
public class MyMetaObjectHandler implements MetaObjectHandler {
/**
* 通用的新增字段
* @param metaObject
*/
@Override
public void insertFill(MetaObject metaObject) {
//判断是否有传递该属性
if (metaObject.hasSetter("createBy")) {
Object createId = getFieldValByName("createBy", metaObject);
if (createId == null) {
log.info("创建人字段值为空 已经填充 ");
//开发中 创建者 修改者ID 通过Aop 或者权限框架获取当前操作用户 ,用用户ID进行填充即可
this.strictInsertFill(metaObject, "createBy", Integer.class, 0);
}
}
//判断是否有传递该属性
if (metaObject.hasSetter("createTime")) {
Object createTime = getFieldValByName("createTime", metaObject);
if (createTime == null) {
log.info("创建时间字段值为空 已经填充 ");
this.strictInsertFill(metaObject, "createTime", Date.class, new Date());
}
}
}
/**
* 通用的更新字段
* @param metaObject
*/
@Override
public void updateFill(MetaObject metaObject) {
//判断是否有传递该属性
if (metaObject.hasSetter("updateBy")) {
Object modifyId = getFieldValByName("updateBy", metaObject);
if (modifyId == null) {
log.info("更新人字段值为空 已经填充 ");
this.strictUpdateFill(metaObject, "updateBy", Integer.class, 1);
}
}
//判断是否有传递该属性
if (metaObject.hasSetter("updateTime")) {
Object modifyTime = getFieldValByName("updateTime", metaObject);
if (modifyTime == null) {
log.info("更新时间字段值为空 已经填充 ");
this.strictUpdateFill(metaObject, "updateTime", Date.class, new Date());
}
}
}
}
删除字段还要再yml文件进行一些配置,用于标注未删除用什么代表,已删除用什么代表。我这里使用0代表可用,1代表已删除
mybatis-plus:
global-config:
db-config:
logic-delete-field: isDelete #对应实体中使用删除标记注解的成员变量
logic-not-delete-value: 0
logic-delete-value: 1
然后执行新增方法时,就会把默认的当前时间和0赋值;执行更新方法会把当前时间和1进行赋值。且在使用MP提供的CRUD方法时会自动为我们把删除标记作为查询条件加入sql语句中。