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】测试请求