说明
自动填充
指的是,当数据被 插入
或者 更新
的时候,会为指定字段
进行一些默认的数据填充
。
比如,插入时,会自动填充数据的创建时间
和更新时间
;更新时,会自动填充数据的更新时间
。
实现方式
- 配置
处理器
- 为字段添加
填充注解
处理器
:用来说明,在插入和更新时,为哪些字段
设置什么样的值
;
填充注解
:用来说明,实体
中的哪些字段开启自动填充。如果实体字段上没有添加注解,是不会自动填充的,即使字段名在处理器中设置了也不会生效。
填充注解的示例:
@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 {@Overridepublic 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(推荐)}@Overridepublic 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;}
数据库模式
测试
代码
/*** 插入用户*/@Testpublic 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);}/*** 更新用户*/@Testpublic void update() {User user = new User();user.setId(15L);user.setAge(30);mapper.updateById(user);}/*** 查询用户*/@Testpublic void selectById() {User user = mapper.selectById(15L);log.info("user:{}", user);}