mybatis-plus自动填充 短命女 2024-03-25 23:11 16阅读 0赞 #### 一、前言 #### 在开发中,许多表中都包含有相同的字段,比如id主键、uuid、create\_time、create\_by、update\_by、update\_time等,这时候我们可以采用 MyBatis-Plus 中的字段自动填充功能去实现。 ##### 思路: ##### 采用mybatis-plus提供的@TableField 注解实现字段内容自动填充。 #### 二、如何使用 #### ##### 第一步: ##### 引入pom依赖 <!--mybatis-plus--> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.2.0</version> </dependency> ##### 第二步 ##### 实体类加上注解填充字段 @TableField(… fill = FieldFill.INSERT) @Data @TableName(value = "user") public class User implements Serializable { //fill字段就是要说明在哪里在什么情况下实现自动填充 @TableField(value = "username",fill = FieldFill.INSERT_UPDATE) private String username; @TableField(value = "password", fill = FieldFill.INSERT_UPDATE) private String password; } 这里面的fieldFill就是选择你要在上面情况下进行自动填充,我们可以点进去看一下。 public enum FieldFill { /** * 默认不处理 */ DEFAULT, /** * 插入时填充字段 */ INSERT, /** * 更新时填充字段 */ UPDATE, /** * 插入和更新时填充字段 */ INSERT_UPDATE } ##### 第三步 ##### 自定义实现类 MyMetaObjectHandler @Component public class MyMetaObjectHandler implements MetaObjectHandler { //这个方法就是插入的时候执行自动填充的方法 @Override // public void insertFill(MetaObject metaObject) { if (metaObject.hasSetter("createTime")) { this.strictInsertFill(metaObject, "createTime", Date.class,LocalDateTime.now())); } } //这个方法就是更新时执行自动填充的方法 @Override public void updateFill(MetaObject metaObject) { this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now()); } } 其中的metaObject就是元对象,你可以通过metaObject.hasSetter()判断有没有这个字段,然后再去执行方法 #### **三、官方文档注意事项** #### * 填充原理是直接给entity的属性设置值!!! * 注解则是指定该属性在对应情况下必有值,如果无值则入库会是null * 填充处理器MyMetaObjectHandler在 Spring Boot 中需要声明@Component或@Bean注入要想根据注解FieldFill.xxx和字段名以及字段类型来区分必须使用父类的strictInsertFill或者 * 不需要根据任何来区分可以使用父类的fillStrategy方法 * update(T t,Wrapper updateWrapper)时t不能为空,否则自动填充失效
还没有评论,来说两句吧...