Mybatis-Plus 可以通过配置实体类的注解来自动添加创建时间和更新时间,这可以减轻一定的开发量。
1 在实体类中添加注解
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 表示在插入和更新数据时都添加。
2 配置自动填充策略
在 Mybatis-Plus 的配置文件中,配置自动填充策略:
<bean id="myMetaObjectHandler" class="com.baomidou.mybatisplus.extension.handlers.MybatisPlusMetaObjectHandler"/>
这里使用 MybatisPlusMetaObjectHandler 来处理自动填充。在该类中,我们需要实现 insertFill 和 updateFill 方法来进行相应的填充操作。
@Configuration//配置类
public class MybatisPlusMetaObjectHandler implements MetaObjectHandler {@Overridepublic void insertFill(MetaObject metaObject) {this.strictInsertFill(metaObject, "createTime", Date.class, new Date());this.strictInsertFill(metaObject, "updateTime", Date.class, new Date());}@Overridepublic void updateFill(MetaObject metaObject) {this.strictUpdateFill(metaObject, "updateTime", Date.class, new Date());}
}
在 insertFill 方法中,我们通过 strictInsertFill 方法来对实体类中的 createTime 和 updateTime 属性进行自动填充;在 updateFill 方法中,则只对 updateTime 进行填充。
3 测试
最后在测试中插入数据,查看数据库中的数据是否自动加入了创建时间和更新时间:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
public class UserMapperTest {@Autowiredprivate UserMapper userMapper;@Testpublic 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 字段已经自动加入了创建时间。