自动填充,意味着就是设置默认值,不依赖数据库设置默认值,依赖程序实现。
首先定义自动填充字段
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
private Date createTime;
/**
* 修改时间
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
/**
* 逻辑删除
*/
@TableField(fill = FieldFill.INSERT)
@TableLogic
private Integer deleteFlag;
然后定义组件:
逻辑删除组件,手动覆盖sqlInjector组件:
@Bean
public ISqlInjector sqlInjector() {
return new LogicSqlInjector();
}
自动填充组件声明:
⚠️:使用@Component声明组件
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
private static final Logger LOGGER = LoggerFactory.getLogger(MyMetaObjectHandler.class);
// 新增的时候自动填充
@Override
public void insertFill(MetaObject metaObject) {
LOGGER.info("start insert fill ....");
this.setFieldValByName("createTime",new Date(),metaObject);
this.setFieldValByName("updateTime", new Date(), metaObject);
this.setFieldValByName("deleteFlag", 0, metaObject);
}
// 更新的税后自动填充
@Override
public void updateFill(MetaObject metaObject) {
LOGGER.info("start update fill ....");
this.setFieldValByName("updateTime", new Date(),metaObject);
}
}
顺便记录一下打印sql语句的组件
/**
* 打印 sql
*/
@Bean
public PerformanceInterceptor performanceInterceptor() {
PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor();
//格式化sql语句
Properties properties = new Properties();
properties.setProperty("format", "true");
performanceInterceptor.setProperties(properties);
return performanceInterceptor;
}
参考官方文档: