Mybatis-Plus框架为我们提供了操作数据库时,自动填充的策略。
在实体类的属性上加上@TableField(fill = FieldFill.xxxx),有以下四种策略
1、FieldFill.DEFAULT:默认值,不做任何填充操作。
2、FieldFill.INSERT:只在插入操作时进行填充。
3、FieldFill.UPDATE:只在更新操作时进行填充。
4、FieldFill.INSERT_UPDATE:同时在插入和更新操作时进行填充。这是常见的使用方式,用于记录创建时间和修改时间等字段
例如
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
@TableField(fill = FieldFill.INSERT)
private Long createUser;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Long updateUser;
可以告诉MyBatis-Plus框架在执行相应的数据库操作时如何进行字段填充。具体的填充操作需要结合数据库表和编写的SQL语句来实现。
@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
log.info(metaObject.toString());
//MyBatis 提供的方法,用于直接设置对象的属性值。
//它不会进行任何判断和处理,直接将新值赋给对应的字段。
metaObject.setValue("createTime", LocalDateTime.now());
//strictInsertFill 方法是 MyBatis-Plus 提供的一个便捷方法,
//用于进行严格模式的插入填充。它会判断 metaObject 对象中是否已经存在 createTime 字段的
//值,如果存在则不执行填充,如果不存在则执行填充。这样可以确保在插入数据时,
//只有当字段为空时才进行填充,避免覆盖已有的值。
this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now()); // 起始版本 3.3.0(推荐使用)
}
}
@Compomemt 注册成为Bean,当执行数据库操作时,MyBatis-Plus 会检测到容器中存在 MetaObjectHandler 对象,并自动调用其中的方法(如 insertFill、updateFill)来进行字段填充