MyBatisPlus 自动填充演示

一、数据库


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

二、实体类 Entity


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

 1 public class EduTeacher implements Serializable {
 2 
 3     //注意!这里需要标记为填充字段
 4     @TableField(fill = FieldFill.INSERT)
 5     @ApiModelProperty(value = "创建时间")
 6     private Date gmtCreate;
 7 
 8     @TableField(fill = FieldFill.INSERT_UPDATE)
 9     @ApiModelProperty(value = "更新时间")
10     private Date gmtModified;
11 
12 }

三、 公共类


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

 1 import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
 2 import org.apache.ibatis.reflection.MetaObject;
 3 import org.springframework.stereotype.Component;
 4 
 5 import java.util.Date;
 6 
 7 /**
 8  * @description:
 9  * @author: zzx
10  * @createDate: 2020/6/1
11  * @version: 1.0
12  */
13 @Slf4j
14 @Component
15 public class MyMetaObjectHandler implements MetaObjectHandler {
16     @Override
17     public void insertFill(MetaObject metaObject) {
18         log.info("start insert fill ....");
19         //属性名称,不是字段名称
20         this.strictInsertFill(metaObject, "gmtCreate", LocalDateTime.class, LocalDateTime.now()); // 起始版本 3.3.0(推荐使用)
21         //this.fillStrategy(metaObject, "gmtCreate", LocalDateTime.now()); // 也可以使用(3.3.0 该方法有bug请升级到之后的版本如`3.3.1.8-SNAPSHOT`)
22         /* 上面选其一使用,下面的已过时(注意 strictInsertFill 有多个方法,详细查看源码) */
23         //this.setFieldValByName("gmtCreate",new Date(),metaObject);
24         //this.setFieldValByName("gmtModified",new Date(),metaObject);
25     }
26 
27     @Override
28     public void updateFill(MetaObject metaObject) {
29         log.info("start update fill ....");
30         this.strictUpdateFill(metaObject, "gmtModified", LocalDateTime.class, LocalDateTime.now()); // 起始版本 3.3.0(推荐使用)
31         //this.fillStrategy(metaObject, "gmtModified", LocalDateTime.now()); // 也可以使用(3.3.0 该方法有bug请升级到之后的版本如`3.3.1.8-SNAPSHOT`)
32         /* 上面选其一使用,下面的已过时(注意 strictUpdateFill 有多个方法,详细查看源码) */
33         //this.setUpdateFieldValByName("gmtModified", LocalDateTime.now(), metaObject);
34         //this.setFieldValByName("gmtModified",new Date(),metaObject);
35     }
36 }

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

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


1 <!--mybatis-plus-->
2 <dependency>
3     <groupId>com.baomidou</groupId>
4     <artifactId>mybatis-plus-boot-starter</artifactId>
5     <scope>provided </scope>
6 </dependency>

五、测试


【1】测试请求

【2】数据库结果

posted @ 2020-11-15 00:40  Java程序员进阶  阅读(326)  评论(0编辑  收藏  举报