MyBatis-Plus进阶之字段自动填充
2023-12-15 03:44:56
自动填充有什么用
在我们数据库新增或者修改数据的时候,有一些字段是公有而且必填的,比如新增、修改时间,操作人ID等,这些字段不需要用户传入,但是必填,这就需要我们在代码中填写,由于这些字段在很多表中都存在,如果我们一个一个表去填充,那么相对会比较麻烦,这时候使用自动填充可以帮我们解决
MyBatis-Plus实现自动填充
1、添加注解
在需要自动填充的字段上添加@TableField注解,并配置fill属性
fill属性可以配置FieldFill 下的几种类型,如下所示
public enum FieldFill {
/**
* 默认不处理
*/
DEFAULT,
/**
* 插入时填充字段
*/
INSERT,
/**
* 更新时填充字段
*/
UPDATE,
/**
* 插入和更新时填充字段
*/
INSERT_UPDATE
}
下面是我在实体类的创建时间和更新时间的样例
/**
* 创建时间
*/
@TableField(value = "createTime",fill = FieldFill.INSERT)
private LocalDateTime createTime;
/**
* 更新时间
*/
@TableField(value = "modifyTime",fill = FieldFill.INSERT_UPDATE)
private LocalDateTime modifyTime;
2、自定义MetaObjectHandler接口的实现类
MetaObjectHandler接口最主要的就是以下这两个方法,这两个方法用于定义我们新增和修改对象的字段填充逻辑
/**
* 插入元对象字段填充(用于插入时对公共字段的填充)
*
* @param metaObject 元对象
*/
void insertFill(MetaObject metaObject);
/**
* 更新元对象字段填充(用于更新时对公共字段的填充)
*
* @param metaObject 元对象
*/
void updateFill(MetaObject metaObject);
我们实现MetaObjectHandler接口,并实现以上两个方法完成字段填充
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
/**
* 新增填充策略
* @param metaObject
*/
@Override
public void insertFill(MetaObject metaObject) {
if (metaObject.hasGetter("createTime")) {
// 起始版本 3.3.0(推荐使用)
this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());
}
if (metaObject.hasGetter("modifyTime")) {
this.strictInsertFill(metaObject, "modifyTime", LocalDateTime.class, LocalDateTime.now());
}
}
/**
* 更新填充策略
* @param metaObject
*/
@Override
public void updateFill(MetaObject metaObject) {
if (metaObject.hasGetter("modifyTime")) {
this.strictInsertFill(metaObject, "modifyTime", LocalDateTime.class, LocalDateTime.now());
}
}
}
文章来源:https://blog.csdn.net/qq_36551991/article/details/134931094
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!