MyBatisPlus(十九)自动填充

说明

自动填充指的是,当数据被 插入 或者 更新 的时候,会为指定字段进行一些默认的数据填充
比如,插入时,会自动填充数据的创建时间更新时间;更新时,会自动填充数据的更新时间

实现方式

  1. 配置处理器
  2. 为字段添加填充注解

处理器:用来说明,在插入和更新时,为哪些字段设置什么样的值

填充注解:用来说明,实体中的哪些字段开启自动填充。如果实体字段上没有添加注解,是不会自动填充的,即使字段名在处理器中设置了也不会生效。

填充注解的示例:@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("[email protected]");
        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);
    }

插入数据

在这里插入图片描述

在这里插入图片描述

更新数据

在这里插入图片描述

在这里插入图片描述

查询数据

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/sgx1825192/article/details/133871199