项目中经常会遇到一些数据,每次都使用相同的方式填充,例如记录的创建时间,更新时间等。 我们可以使用MyBatis Plus的自动填充功能,完成这些字段的赋值工作。
实现步骤 1.数据库表中添加自动填充字段
@Data
@Entity
public class Users {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY) //auto_increment类型
@TableId(type = IdType.AUTO)
private Long 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;
}
2.实现元对象处理器接口
新建handler包,创建MyMetaObjectHandler类,代码如下:
package com.simoniu.mpdemo.handler;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import org.apache.ibatis.reflection.MetaObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import java.util.Date;
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
private static final Logger LOGGER = LoggerFactory.getLogger(MyMetaObjectHandler.class);
@Override
public void insertFill(MetaObject metaObject) {
LOGGER.info("start insert fill ....");
this.setFieldValByName("createTime", new Date(), metaObject);
this.setFieldValByName("updateTime", new Date(), metaObject);
}
@Override
public void updateFill(MetaObject metaObject) {
LOGGER.info("start update fill ....");
this.setFieldValByName("updateTime", new Date(), metaObject);
}
}
3.测试
//测试添加单个用户资料
@Test
public void testInsert() {
Users u = new Users();
u.setName("admin");
u.setEmail("admin@qq.com");
u.setAge(30);
int result = usersMapper.insert(u);
System.out.println("受影响的记录条数是:" + result);
System.out.println("新增记录的主键是:" + u.getId());
}
//测试更新
@Test
public void testUpdate() {
Users u = usersMapper.selectById(1L);
u.setName("张三丰");
int result = usersMapper.updateById(u);
System.out.println("受影响的记录条数是:" + result);
}
测试插入新记录后,createTime和updateTime都会插入最新的日期时间。 测试更新记录后,updateTime会插入最新的日期时间。