字段数据自动填充
1、准备工作
- 假设我们有如下一张用户信息表,下面演示“操作类型”和“操作时间”这两个字段如何通过自动填充功能进行赋值:
- 首先使用 @TableField 注解标记实体类中的哪些字段需要填充,这里我们选择插入或更新都自动填充:
FieldFill 是一个枚举,用于指定在何种情况下会自动填充,有如下几种可选值:
- DEFAULT:默认不处理
- INSERT:插入填充字段
- UPDATE:更新填充字段
- INSERT_UPDATE:插入和更新填充字段
@Data
public class UserInfo {
private Integer id;
private String userName;
private String passWord;
private Integer age;
@TableField(fill = FieldFill.INSERT_UPDATE)
private String operationType;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date operationTime;
}
- 接着编写公共字段填充处理器类,该类继承了 MetaObjectHandler 类,重写 insertFill 和 updateFill 方法,我们在这两个方法中获取需要填充的字段以及默认填充的值。
注意:
- 填充处理器 MyMetaObjectHandler 在 Spring Boot 中需要声明 @Component 或 @Bean 注入
- strictInsertFill 和 strictUpdateFill 方法第二个参数写的是实体类里的属性名,不是对应数据库字段名。
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
this.strictInsertFill(metaObject, "operationType", String.class, "新增");
this.strictInsertFill(metaObject, "operationTime", Date.class, new Date());
}
@Override
public void updateFill(MetaObject metaObject) {
this.strictUpdateFill(metaObject, "operationType", String.class, "修改");
this.strictUpdateFill(metaObject, "operationTime", Date.class, new Date());
}
}
- 如果是 3.3.0 后面的版本,比如 3.3.1.8,也可以改用下面更简单的写法(3.3.0 不要用该方法,有 bug)
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
this.fillStrategy(metaObject, "operationType", "新增");
this.fillStrategy(metaObject, "operationTime", new Date());
}
@Override
public void updateFill(MetaObject metaObject) {
this.fillStrategy(metaObject, "operationType", "修改");
this.fillStrategy(metaObject, "operationTime", new Date());
}
}
2、开始测试
- 首先创建一个对象插入到数据库,可以看到虽然对象里的 contact 是一个 Map,但会自动转成 JSON 字符串存到数据库中:
UserInfo user = new UserInfo();
user.setUserName("hangge");
user.setPassWord("123");
userInfoMapper.insert(user);
--------------最后感谢大家的阅读,愿大家技术越来越流弊!--------------
--------------也希望大家给我点支持,谢谢各位大佬了!!!--------------