MyBatis-plus自动填充功能之自动填充时间

MyBatis-plus自动填充功能之自动填充时间

在实际操作过程中,我们并不希望创建时间、修改时间这些来手动进行,而是希望通过自动化来完成,而mybatis-plus则也提供了自动填充功能来实现这一操作,接下来,就来了解一下mybatis-plusz的自动填充功能是如何进行操作的。

一、前期工作

准备工作完全可以参考上一篇笔记MyBatis-plus快速入门https://blog.csdn.net/junR_980218/article/details/124816265
参考mybatis-plus笔记一直到测试前面部分,然后开始参考下面的操作进行今天的内容部分。

二、自动填充

2.1 数据库级别

1、在数据库的user表中添加create_time、update_time字段
在这里插入图片描述
2、在实体类User中添加字段 并且天界set/get方法,有参构造方法等


import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;

import java.util.Date;


public class User {

    @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;


    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    public Date getUpdateTime() {
        return updateTime;
    }

    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }

    public User() {
    }

    public User(Long id, String name, Integer age, String email, Date createTime, Date updateTime) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.email = email;
        this.createTime = createTime;
        this.updateTime = updateTime;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", email='" + email + '\'' +
                ", createTime=" + createTime +
                ", updateTime=" + updateTime +
                '}';
    }
}

3、测试

@Test
//测试更新
public void testUpdate(){
    User user1 = new User();
    user1.setId(81L);
    user1.setName("关注我的公众号:狂神说java");
    user1.setAge(3);
    user1.setEmail("18058429082qq.com");
    //updateById 参数是一个对象
    int i = userMapper.updateById(user1);
    System.out.println(user1);

}

在这里插入图片描述
测试结果
在这里插入图片描述
可以从控制台的日志中看到,根本没有对时间的这两个字段进行操作,但是数据库中的时间已经进行了修改,这就是数据库级别的自动填充
在这里插入图片描述
但是在我们日常的开发过程中,是不允许轻易修改数据库的,所以上面这种数据库级别的操作不实用,于是我们进行下一种代码级别的操作,来实现同样的时间填充功能。

2.2 代码级别

1、还原上面步骤对于数据库表结构的操作,只留下create_time/update_time这两个字段即可
在这里插入图片描述
2、在实体类User中,对相关字段添加填充内容

/**
 * 字段添加填充内容
 */
@TableField(fill= FieldFill.INSERT)
private Date createTime;
@TableField(fill=FieldFill.INSERT_UPDATE)
private Date updateTime;

3、编写处理器MyMetaObjectHandler来处理,对实体类字段上添加的操作
在这里插入图片描述


import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

import java.util.Date;

/**
 * 这个注解 表示就是要把处理器 丢到IOC容器中  这一点千万不能忘记 !
 */
@Component
/**
 * @author ctgu
 * @date 2022/5/18 8:55
 */
public class MyMetaObjectHandler implements MetaObjectHandler {
    /**
     * 插入时候的填充策略
     * @param metaObject
     */
    @Override
    public void insertFill(MetaObject metaObject) {
        log.info("start insert fill");
        // setFieldValByName(String fieldName, Object fieldVal, MetaObject metaObject)
        //给createTime这个字段和updateTime这俩字段 来一个什么值呢 来一个自动插入时间 传一个数据 这个数据就是mataObject
        this.setFieldValByName("createTime",new Date(),metaObject);
        this.setFieldValByName("updateTime",new Date(),metaObject);



    }

    /**
     * 更新时候的填充策略
     * @param metaObject
     */
    @Override
    public void updateFill(MetaObject metaObject) {
        log.info("start update fill");
        this.setFieldValByName("updateTime",new Date(),metaObject);

    }
}

4、测试

先进行插入测试

//测试插入
@Test
public void testInsert(){
    User user = new User();
    user.setName("狂神说java");
    user.setAge(3);
    user.setEmail("18058429082qq.com");
    int insert = userMapper.insert(user);
    System.out.println(insert);
    System.out.println(user);
    //User{id=1526399165514063874, name='狂神说java', age=3, email='18058429082qq.com'}
    //没有插入id,但是却存在id  说明他帮我们自动生成了id
}

更新测试

 @Test
    //测试更新
    public void testUpdate(){
        User user1 = new User();
        user1.setId(1526399165514063878L);
        user1.setName("关注我的公众号:狂神说java");
        user1.setAge(3);
        user1.setEmail("18058429082qq.com");
        //updateById 参数是一个对象
        int i = userMapper.updateById(user1);
        System.out.println(user1);

    }

测试结果 插入的时候已经把时间插入进去了,更新时候也对时间进行了更新
在这里插入图片描述
至此,MyBatis-plus自动填充功能之自动填充时间操作全部完成。

  • 1
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要关闭mybatis-plus自动填充时间功能,你可以在mybatis-plus的全局配置中将MetaObjectHandler设置为null。在你的MybatisPlusConfig类中,将globalConfig.setMetaObjectHandler(new MetaHandler())改为globalConfig.setMetaObjectHandler(null)即可。这样设置后,mybatis-plus将不再自动填充时间字段。\[3\] #### 引用[.reference_title] - *1* [MyBatis-plus自动填充功能自动填充时间](https://blog.csdn.net/Summer_And_Opencv/article/details/126320509)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [JavaMybatis-Plus自动填充功能配置和使用](https://blog.csdn.net/mouday/article/details/131005315)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [mybatis-plus自动填充失效](https://blog.csdn.net/qq_56700112/article/details/131250304)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值