MetaObjectHandler接口
是mybatisPlus为我们提供的的一个扩展接口,我们可以利用这个接口在我们插入
或者更新
数据的时候,为一些字段指定默认值
。实现这个需求的方法不止一种,在sql层面也可以做到,在建表的时候也可以指定默认值。
- 在实体类上加入
@tableField注解
public class Role{ @TableId(type = IdType.AUTO) private Integer id; /** * 创建时间 时间戳 */ @TableField(fill = FieldFill.INSERT) private Long createTimeStamp; /** * 最后修改时间 时间戳 */ @TableField(fill = FieldFill.UPDATE) private Long lastModifyTimeStamp; }
- 创建配置类
实现MetaObjectHandler接口
@Log4j2 @Component public class MyMetaObjectHandler implements MetaObjectHandler { @Override public void insertFill(MetaObject metaObject) { Long now = System.currentTimeMillis(); // 获取 createTimeStamp 字段的值 Object createTimeStamp = getFieldValByName("createTimeStamp", metaObject); if(Objects.isNull(createTimeStamp)){ this.setInsertFieldValByName("createTimeStamp", now, metaObject); } Object lastModifyTimeStamp = getFieldValByName("lastModifyTimeStamp", metaObject); if(Objects.isNull(lastModifyTimeStamp)){ this.setInsertFieldValByName("lastModifyTimeStamp", now, metaObject); } else { if(lastModifyTimeStamp instanceof Long){ Long longValue = (Long) lastModifyTimeStamp; if(longValue>now){ this.setInsertFieldValByName("lastModifyTimeStamp", now, metaObject); } } } } @Override public void updateFill(MetaObject metaObject) { log.info("更新时自动填充..."); this.strictInsertFill(metaObject,"updateTime", LocalDateTime.class,LocalDateTime.now(ZoneId.of("Asia/Shanghai"))); } }