MyBatisPlus 自动填充演示

目录

一、数据库

二、实体类 Entity

三、 公共类

四、MyBatisPlus 依赖

五、测试


一、数据库


表中新增“添加时间”和“修改时间”字段;

二、实体类 Entity


在实体类中的“添加时间”和“修改时间”的属性字段中添加 @TableField(fill = FieldFill.INSERT),其中 FieldFill 中包含默认(DEFAULT), 插入(INSERT), 修改(UPDATE), 插入和修改(INSERT_UPDATE)你可以点进源码进行查看;

public class EduTeacher implements Serializable {

    //注意!这里需要标记为填充字段
    @TableField(fill = FieldFill.INSERT)
    @ApiModelProperty(value = "创建时间")
    private Date gmtCreate;

    @TableField(fill = FieldFill.INSERT_UPDATE)
    @ApiModelProperty(value = "更新时间")
    private Date gmtModified;

}

三、 公共类


采用AOP的思想,实现 MetaObjectHandler接口,并实现其中的 insertFill updateFill 方法,如下:

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

import java.util.Date;

/**
 * @description:
 * @author: zzx
 * @createDate: 2020/6/1
 * @version: 1.0
 */
@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        log.info("start insert fill ....");
        //属性名称,不是字段名称
        this.strictInsertFill(metaObject, "gmtCreate", LocalDateTime.class, LocalDateTime.now()); // 起始版本 3.3.0(推荐使用)
        //this.fillStrategy(metaObject, "gmtCreate", LocalDateTime.now()); // 也可以使用(3.3.0 该方法有bug请升级到之后的版本如`3.3.1.8-SNAPSHOT`)
        /* 上面选其一使用,下面的已过时(注意 strictInsertFill 有多个方法,详细查看源码) */
        //this.setFieldValByName("gmtCreate",new Date(),metaObject);
        //this.setFieldValByName("gmtModified",new Date(),metaObject);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        log.info("start update fill ....");
        this.strictUpdateFill(metaObject, "gmtModified", LocalDateTime.class, LocalDateTime.now()); // 起始版本 3.3.0(推荐使用)
        //this.fillStrategy(metaObject, "gmtModified", LocalDateTime.now()); // 也可以使用(3.3.0 该方法有bug请升级到之后的版本如`3.3.1.8-SNAPSHOT`)
        /* 上面选其一使用,下面的已过时(注意 strictUpdateFill 有多个方法,详细查看源码) */
        //this.setUpdateFieldValByName("gmtModified", LocalDateTime.now(), metaObject);
        //this.setFieldValByName("gmtModified",new Date(),metaObject);
    }
}

注意事项:
【1】字段必须声明TableField注解,属性fill选择对应策略,该声明告知Mybatis-Plus需要预留注入SQL字段
【2】填充处理器MyMetaObjectHandler在 Spring Boot 中需要声明@Component或@Bean注入
【3】要想根据注解FieldFill.xxx和字段名以及字段类型来区分必须使用父类的strictInsertFill或者strictUpdateFill方法
【4】不需要根据任何来区分可以使用父类的fillStrategy方法   

四、MyBatisPlus 依赖(一般项目中都有,你可能不需要)


<!--mybatis-plus-->
<dependency>
	<groupId>com.baomidou</groupId>
	<artifactId>mybatis-plus-boot-starter</artifactId>
	<scope>provided </scope>
</dependency>

五、测试


【1】测试请求

【2】数据库结果


 ---高级程序员资料,关注公众号获取---

猜你喜欢

转载自blog.csdn.net/zhengzhaoyang122/article/details/106475046