概述
Mybatis-Plus官方文档:自动填充功能
1. 在实体类的属性上添加 @TableField
注解,指定自动填充的策略;
填充策略:
/**
* 创建人
*/
@TableField(fill = FieldFill.INSERT) // 插入时填充字段
private Long createUser;
/**
* 修改人
*/
@TableField(fill = FieldFill.INSERT_UPDATE) // 插入和修改时填充字段
private Long updateUser;
2. 按照框架要求编写 元数据对象处理器
, 在此类中统一为公共字段
赋值,此类需要实现 MetaObjectHandler
接口。
/**
* 元数据对象处理器,实现 MetaObjectHandler接口
*/
@Component
@Slf4j
public class MyMetaObjectHandler implements MetaObjectHandler {
/**
* 插入操作,自动填充
* @param metaObject
*/
@Override
public void insertFill(MetaObject metaObject) {
// 获得当前线程的 request,得到 session,获取session中的 employeeId。RequestAttributes.SCOPE_SESSION:获取范围为session。
// 注意,由于线程问题,不能写在该方法外
Long employeeId = (Long) RequestContextHolder
.currentRequestAttributes()
.getAttribute("employeeId", RequestAttributes.SCOPE_SESSION);
//将当前时间赋值给“createTime”属性,这样当插入或修改数据时,createTime是有值的,而不是null
metaObject.setValue("createTime", LocalDateTime.now());
metaObject.setValue("updateTime", LocalDateTime.now());
//将“创建人”赋值给“createUser”属性,当执行插入操作时自动执行
metaObject.setValue("createUser", employeeId);
//当执行插入操作或更新操作时自动执行
metaObject.setValue("updateUser", employeeId);
}
/**
* 更新操作,自动填充
* @param metaObject
*/
@Override
public void updateFill(MetaObject metaObject) {
// 获得当前线程的 request,得到 session,获取session中的 employeeId。RequestAttributes.SCOPE_SESSION:获取范围为session。
Long employeeId = (Long) RequestContextHolder
.currentRequestAttributes()
.getAttribute("employeeId", RequestAttributes.SCOPE_SESSION);
metaObject.setValue("updateTime", LocalDateTime.now());
metaObject.setValue("updateUser", employeeId);
}
}
下面是官方文档的操作:
@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
log.info("start insert fill ....");
this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now()); // 起始版本 3.3.0(推荐使用)
// 或者
this.strictInsertFill(metaObject, "createTime", () -> LocalDateTime.now(), LocalDateTime.class); // 起始版本 3.3.3(推荐)
// 或者
this.fillStrategy(metaObject, "createTime", LocalDateTime.now()); // 也可以使用(3.3.0 该方法有bug)
}
@Override
public void updateFill(MetaObject metaObject) {
log.info("start update fill ....");
this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now()); // 起始版本 3.3.0(推荐)
// 或者
this.strictUpdateFill(metaObject, "updateTime", () -> LocalDateTime.now(), LocalDateTime.class); // 起始版本 3.3.3(推荐)
// 或者
this.fillStrategy(metaObject, "updateTime", LocalDateTime.now()); // 也可以使用(3.3.0 该方法有bug)
}
}
这样的话,当createUser执行插入操作 或 updateUser执行插入和更新操作时,会按照 MetaObjectHandler
中的处理方式进行自动填充。
最后
以上就是威武饼干为你收集整理的Mybatis-plus 公共字段自动填充的全部内容,希望文章能够帮你解决Mybatis-plus 公共字段自动填充所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复