开发项目时有一些数据 , 每次都需要使用相同的方法进行字段的填充赋值 , 比如 : 一条记录的创建时间,更新时间 , 这些数据手动赋值 , 显得及其的麻烦 , 可以使用 MyBatis Plus 的自动填充功能,完成这些字段的赋值
Mybatis版本:
<!--mybatis-plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.1</version>
</dependency>
数据库表
create_Time 和 update_Time 这两个字段 希望每次进行新增数据和修改数据时 , 无需手动 new 出来 , 而是自动填充 , 如何实现 ?
实体类
将 create_Time 和 update_Time 这两个字段 添加注解 : @TableField ( fill = FieldFill.XXX ) 配合元对象处理器接口 ( MetaObjectHandler) 自动对其字段进行填充 , 赋值
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
@TableId(type = IdType.INPUT)
private Integer id;
private String name;
private Integer age;
private String email;
@TableField(fill = FieldFill.INSERT) // 当进行插入操作时,对时间进行一个修改
private Date createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)// 当进行增加和修改操作时,对时间进行一个修改
private Date updateTime;
}
元对象处理器接口
@Component
public class UserMetaObjectHandler implements MetaObjectHandler {
@Override
//insert 操作时 ,调用此方法 对其字段进行自动赋值
public void insertFill(MetaObject metaObject) {
// 第一个参数是实体类的某个属性,第二个参数是该属性要设置的默认值 , 此处是赋值当前时间 new Date()
this.setFieldValByName("createTime", new Date(), metaObject);
this.setFieldValByName("updateTime", new Date(), metaObject);
}
@Override
// insert以及update 操作时 ,调用此方法 对其字段进行自动赋值
public void updateFill(MetaObject metaObject) {
this.setFieldValByName("updateTime", new Date(), metaObject);
}
}
测试类
@Test
public void testInsert(){
User user = new User();
user.setId(2);
user.setAge(18);
user.setName("武天老师");
// user.setCreateTime(new Date()); // 每次都需要手动编写日期,很繁琐,因此不用此方式赋值, 配合元对象处理器自动填充
int insert = userMapper.insert(user);
System.out.println("插入成功,影响了"+insert+"行");
}