自动填充:在修改或插入一条数据的时候为某个字段自动滴添加或设置一个值
可以使用mybatis-plus的自动填充功能
也可以使用数据库自带的自动填充功能(设置默认值,默认当前时间等(不同版本功能有一定差异)。。),但是数据库自带的填充功能不一定满足我们的需求(版本、不同数据库等)
例如:阿里中每一个表都会强制必备的三个字段:id,gmt_create(创建时间),gmt_modified(修改时间)
实现:
1.实体类对应字段添加如下对应注解
//fill标识创建的时候填充还是修改的时候填充
@TableField(fill = FieldFill.INSERT)
private Date createDate; //创建时间
@TableField(fill = FieldFill.INSERT)
private Date modifyDate; //修改时间
2.实现MetaObjectHandler类
//实现mybatis-plus的自动填充需要实现MetaObjectHandler
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
//插入时:创建时间和修改时间
this.setFieldValByName("createDate", new Date(), metaObject); //根据值得名字填充
this.setFieldValByName("modifyDate", new Date(), metaObject); //根据值得名字填充
}
@Override
public void updateFill(MetaObject metaObject) {
//修改时:修改时间
this.setFieldValByName("modifyDate", new Date(), metaObject); //根据值得名字填充
}
}
测试:
插入
@Test
void test() {
Employee employee = new Employee(null, "自动填充", "wujin@qq.com", 0, 18);
employeeService.save(employee);
System.out.println(employee);
}
更新
问题:
mybatis-plus的自动填充时间的问题(添加到数据库的时间比当前时间多4个小时)
连接数据库时时区:autoReconnect=true&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8