Mybatis-Plus 可以通过配置实体类的注解来自动添加创建时间和更新时间,这可以减轻一定的开发量。
public class User {
@TableId(type = IdType.AUTO)
private Long id;
private String username;
private String password;
@TableField(fill = FieldFill.INSERT)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") //指定格式
private Date createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime;
//省略Getter和Setter
}
在实体类中,通过 @TableField 注解来标识要自动添加的属性,其中 fill 属性表示填充策略,比如 FieldFill.INSERT 表示在插入数据时添加,FieldFill.INSERT_UPDATE 表示在插入和更新数据时都添加。
在 Mybatis-Plus 的配置文件中,配置自动填充策略:
这里使用 MybatisPlusMetaObjectHandler 来处理自动填充。在该类中,我们需要实现 insertFill 和 updateFill 方法来进行相应的填充操作。
@Configuration//配置类
public class MybatisPlusMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
this.strictInsertFill(metaObject, "createTime", Date.class, new Date());
this.strictInsertFill(metaObject, "updateTime", Date.class, new Date());
}
@Override
public void updateFill(MetaObject metaObject) {
this.strictUpdateFill(metaObject, "updateTime", Date.class, new Date());
}
}
在 insertFill 方法中,我们通过 strictInsertFill 方法来对实体类中的 createTime 和 updateTime 属性进行自动填充;在 updateFill 方法中,则只对 updateTime 进行填充。
最后在测试中插入数据,查看数据库中的数据是否自动加入了创建时间和更新时间:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
public class UserMapperTest {
@Autowired
private UserMapper userMapper;
@Test
public void insert() {
User user = new User();
user.setUsername("test");
user.setPassword("test");
userMapper.insert(user);
System.out.println(user);
}
}
输出结果如下:
User(id=1, username=test, password=test, createTime=2021-08-12 19:17:22, updateTime=null)
可以看到 createTime 字段已经自动加入了创建时间。