说明
自动填充
指的是,当数据被 插入
或者 更新
的时候,会为指定字段
进行一些默认的数据填充
。
比如,插入时,会自动填充数据的创建时间
和更新时间
;更新时,会自动填充数据的更新时间
。
实现方式
- 配置
处理器
- 为字段添加
填充注解
处理器
:用来说明,在插入和更新时,为哪些字段
设置什么样的值
;
填充注解
:用来说明,实体
中的哪些字段开启自动填充。如果实体字段上没有添加注解,是不会自动填充的,即使字段名在处理器中设置了也不会生效。
填充注解的示例:
@TableField(fill = FieldFill.INSERT)
代码
处理器
package com.example.core.config;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.util.Date;
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
Date date = new Date();
this.strictInsertFill(metaObject, "createTime", () -> date, Date.class); // 起始版本 3.3.3(推荐)
this.strictUpdateFill(metaObject, "updateTime", () -> date, Date.class); // 起始版本 3.3.3(推荐)
}
@Override
public void updateFill(MetaObject metaObject) {
this.strictUpdateFill(metaObject, "updateTime", Date::new, Date.class); // 起始版本 3.3.3(推荐)
}
}
填充注解
package com.example.web.entity;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import com.example.web.enumeration.GenderEnum;
import lombok.Data;
import java.util.Date;
import java.util.List;
@Data
@TableName(autoResultMap = true)
public class User {
private Long id;
private String name;
private Integer age;
private String email;
private Integer deleted;
private GenderEnum gender;
@TableField(typeHandler = JacksonTypeHandler.class)
private List<Integer> tags;
@TableField(typeHandler = JacksonTypeHandler.class)
private List<Contact> contacts;
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
private Date createTime;
/**
* 更新时间
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
}
数据库模式
测试
代码
/**
* 插入用户
*/
@Test
public void insert() {
User user = new User();
user.setId(15L);
user.setName("吴一");
user.setAge(29);
user.setEmail("wuyi@example.com");
user.setGender(GenderEnum.MALE);
mapper.insert(user);
}
/**
* 更新用户
*/
@Test
public void update() {
User user = new User();
user.setId(15L);
user.setAge(30);
mapper.updateById(user);
}
/**
* 查询用户
*/
@Test
public void selectById() {
User user = mapper.selectById(15L);
log.info("user:{}", user);
}