网站上有很多这样的教程,实现metaObjectHandler接口,类中加上注释就好了,但是用@Bean修饰的时候该怎么使用呢,我大概整理了一下:
首先先实现接口,很多教程都写的很详细,我就按照我的理解写一次,有什么不对的请多多指正。
**自定义MyBatisPlusmetaObjectHandler **
@Slf4j
public class MyBatisPlusmetaObjectHandler implements metaObjectHandler {
private final String DATE_CLASS_NAME = "class java.util.Date";
@Override
public void insertFill(metaObject metaObject) {
try {
String createType = metaObject.getGetterType(CREATE_TIME).toString();
if (DATE_CLASS_NAME.equals(createType)) {
// 设置createTime(baseEntity)
setValue(metaObject, CREATE_TIME, new Date());
} else {
setValue(metaObject, CREATE_TIME, (int) (System.currentTimeMillis() / 1000));
}
String updateType = metaObject.getGetterType(UPDATE_TIME).toString();
if (DATE_CLASS_NAME.equals(updateType)) {
// 设置createTime(baseEntity)
setValue(metaObject, UPDATE_TIME, new Date());
} else {
setValue(metaObject, UPDATE_TIME, (int) (System.currentTimeMillis() / 1000));
}
} catch (ReflectionException e) {
log.warn("CustommetaObjectHandler处理过程中无相关字段,不做处理");
}
}
@Override
public void updateFill(metaObject metaObject) {
try {
String updateType = metaObject.getGetterType(UPDATE_TIME).toString();
if (DATE_CLASS_NAME.equals(updateType)) {
// 设置createTime(baseEntity)
setValue(metaObject, UPDATE_TIME, new Date());
} else {
setValue(metaObject, UPDATE_TIME, (int) (System.currentTimeMillis() / 1000));
}
} catch (ReflectionException e) {
log.warn("CustommetaObjectHandler处理过程中无相关字段,不做处理");
}
}
}
用到的枚举类型
String UPDATE_TIME = "updateTime";
String CREATE_TIME = "createTime";
在配置文件中注册@bean
@Configuration
@AutoConfigureBefore(MybatisPlusAutoConfiguration.class)
public class GunsMyBatisPlusConfiguration {
@Bean
public metaObjectHandler metaObjectHandler() {
return new MyBatisPlusmetaObjectHandler();
}
}
在类中加入TableField注解
@TableField(value = "create_time",fill = FieldFill.INSERT) private Integer createTime; @TableField(value = "update_time",fill = FieldFill.INSERT_UPDATE) private Integer updateTime;
在执行插入或者更新的时候会自动的把时间填充进去



