使用场景
在数据库中插入数据或者更新数据时,往往伴随的时间的更新,此时又不想用数据库给定的时间,那么我们就可以使用mybatis-plus中的MetaObjectHandler接口 来实现时间更新的目的
MetaObjectHandler接口是mybatis-plus为我们提供的的一个扩展接口,我们可以利用这个接口在我们插入或者更新数据的时候,为一些字段指定默认值。
MetaObjectHandler使用方法
配置好项目环境以后
导入mybatis-plus-boot-starterpom 文件
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.0.5</version>
</dependency>
设计好相对应的sql,找到需要操纵的变量名
在实体类中添加 @TableField注解
FieldFill.INSERT表示只是插入时生效
FieldFill.INSERT_UPDATE 表示插入和更新时生效
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
private Date gmtCreate;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date gmtModified;
在config目录下创建Myandler类实现MetaObjectHandler
注:需要加上@Component注解
@Component
public class MyHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
System.out.println("添加插入时间");
this.setFieldValByName("gmtCreate",new Date(),metaObject);
this.setFieldValByName("gmtModified",new Date(),metaObject);
}
@Override
public void updateFill(MetaObject metaObject) {
System.out.println("添加更新时间");
this.setFieldValByName("gmtModified",new Date(),metaObject);
}
}
测试
测试类
@SpringBootTest
public class UserMemberTest {
@Resource
private UmsMemberMapper umsMemberMapper;
@Test
void testInsert(){
UmsMember w =new UmsMember();
w.setUsername("whj");
w.setNickName("nick");
w.setStatus(0);
w.setEmail("123456780@qq.cpm");
w.setNote("note");
umsMemberMapper.insert(w);
}
@Test
void testUpdate(){
UmsMember w = new UmsMember();
w.setId(70L);
umsMemberMapper.updateById(w);
}
}
首先执行testInsert() 方法,可以看到对应的变量名中的时间是相同的
其次执行 testUpdate()方法,可以看到时间上的不同