前言
在项目中,经常会有一些公共字段,例如createUser,createTime,isDeleted等,需要全局赋值,来看看在Springboot中怎么做吧。
使用
填充类型
public enum FieldFill {
DEFAULT, //默认
INSERT, //插入时填充
UPDATE, //更新时填充
INSERT_UPDATE; //插入和更新时填充
private FieldFill() {
}
}
使用方法
只需要在字段上添加@TableField注解,并设置注解属性 fill = FieldFill.INSERT即可。
//实体类
@Data
public class Demo {
@TableField(value = "create_time", fill = FieldFill.INSERT)
private Date createTime;
@TableField(value = "create_user", fill = FieldFill.INSERT)
private String createUser;
@TableField(value = "update_time", fill = FieldFill.UPDATE)
private Date updateTime;
}
@Configuration
public class MyBatisPlusConfig {
/**
* 解决了insert/update数据时默认值问题
* @return
*/
@Bean
public MetaObjectHandler metaObjectHandler() {
return new MetaObjectHandler() {
@Override
public void insertFill(MetaObject metaObject) {
String now = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(System.currentTimeMillis()));
Object createTime = this.getFieldValByName("createTime", metaObject);
if(Objects.isNull(createTime)) {
this.setFieldValByName("createTime", new Date(System.currentTimeMillis()), metaObject);
}
this.setFieldValByName("createUser", "admin", metaObject);
}
@Override
public void updateFill(MetaObject metaObject) {
String now = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(System.currentTimeMillis()));
this.setFieldValByName("updateTime", new Date(System.currentTimeMillis()), metaObject);
}
};
}
}