← 返回首页
MybatisPlus基础教程 (五)
发表时间:2020-03-29 00:58:53
讲解MybatisPlus的自动填充

项目中经常会遇到一些数据,每次都使用相同的方式填充,例如记录的创建时间,更新时间等。 我们可以使用MyBatis Plus的自动填充功能,完成这些字段的赋值工作。

实现步骤 1.数据库表中添加自动填充字段

@Data
@Entity
public class Users {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY) //auto_increment类型
    @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;
}

2.实现元对象处理器接口

新建handler包,创建MyMetaObjectHandler类,代码如下:

package com.simoniu.mpdemo.handler;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import org.apache.ibatis.reflection.MetaObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import java.util.Date;

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {

    private static final Logger LOGGER = LoggerFactory.getLogger(MyMetaObjectHandler.class);

    @Override
    public void insertFill(MetaObject metaObject) {

        LOGGER.info("start insert fill ....");
        this.setFieldValByName("createTime", new Date(), metaObject);
        this.setFieldValByName("updateTime", new Date(), metaObject);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        LOGGER.info("start update fill ....");
        this.setFieldValByName("updateTime", new Date(), metaObject);
    }
}

3.测试

    //测试添加单个用户资料
    @Test
    public void testInsert() {

        Users u = new Users();
       u.setName("admin");
        u.setEmail("admin@qq.com");
        u.setAge(30);
        int result = usersMapper.insert(u);
        System.out.println("受影响的记录条数是:" + result);
        System.out.println("新增记录的主键是:" + u.getId());
    }

   //测试更新
    @Test
    public void testUpdate() {
        Users u = usersMapper.selectById(1L);
        u.setName("张三丰");
        int result = usersMapper.updateById(u);
        System.out.println("受影响的记录条数是:" + result);

    }

测试插入新记录后,createTime和updateTime都会插入最新的日期时间。 测试更新记录后,updateTime会插入最新的日期时间。