MybatisPlus自动填充公共字段的策略

背景:数据库中多个表有时间字段,并且字段名一致

需求:该时间字段由MybatisPlus自动插入和更新,业务代码无需处理

方法:

   一、创建基础实体【BaseEntity】,定义需要处理的公共字段(创建时间、修改时间、创建人、修改人、备注……),供其他业务实体类继承

    

 1 import com.baomidou.mybatisplus.annotations.TableField;
 2 import com.baomidou.mybatisplus.enums.FieldFill;
 3 import lombok.Data;
 4 
 5 import java.io.Serializable;
 6 import java.util.Date;
 7 
 8 /**
 9  * @ClassName BaseEntity
10  * @Description 定义时间的基类
11  * @Author AAFE
12  * @Date 2019/12/3 17:39
13  * @Version 1.0
14  **/
15 @Data
16 public class BaseEntity implements Serializable {
17 
18 
19     @TableField(value = "d_create_time", fill = FieldFill.INSERT)
20     private Date createTime;
21 
22 
23     @TableField(value = "d_update_time", fill = FieldFill.INSERT_UPDATE)
24     private Date updateTime;
25 
26 
27 }

   二、创建元数据处理器【MetaHandler】,继承自MetaObjectHandler

  

 1 import com.baomidou.mybatisplus.mapper.MetaObjectHandler;
 2 import org.apache.ibatis.reflection.MetaObject;
 3 import org.springframework.stereotype.Component;
 4 
 5 import java.util.Date;
 6 
 7 /**
 8  * @ClassName MetaHandler
 9  * @Description 处理新增和更新的基础数据填充,配合BaseEntity和MyBatisPlusConfig使用
10  * @Author AAFE
11  * @Date 2019/12/3 17:28
12  * @Version 1.0
13  **/
14 @Component
15 public class MetaHandler extends MetaObjectHandler {
16 
17     /**
18      * 新增数据执行
19      * @param metaObject
20      */
21     @Override
22     public void insertFill(MetaObject metaObject) {
23         this.setFieldValByName("createTime", new Date(), metaObject);
24         this.setFieldValByName("updateTime", new Date(), metaObject);
25     }
26 
27     /**
28      * 更新数据执行
29      * @param metaObject
30      */
31     @Override
32     public void updateFill(MetaObject metaObject) {
33         this.setFieldValByName("updateTime", new Date(), metaObject);
34     }
35 
36 }

   三、创建配置文件【MybatisPlusConfig】,全局注入元数据处理器

    

 1 import com.baomidou.mybatisplus.spring.boot.starter.GlobalConfig;
 2 import org.springframework.context.annotation.Bean;
 3 import org.springframework.context.annotation.Configuration;
 4 
 5 /**
 6  * @ClassName MyBatisPlusConfig
 7  * @Description 插件配置
 8  * @Author AAFE
 9  * @Date 2019/12/3 17:26
10  * @Version 1.0
11  **/
12 @Configuration
13 public class MyBatisPlusConfig {
14     /**
15      * 自动填充功能
16      * @return
17      */
18     @Bean
19     public GlobalConfig globalConfig() {
20         GlobalConfig globalConfig = new GlobalConfig();
21         globalConfig.setMetaObjectHandler(String.valueOf(new MetaHandler()));
22         return globalConfig;
23     }
24 }

   四、创建业务实体类【News】,该实体在进行增加/更新时,时间字段会自动插入数据库,无需代码处理

    

 1 import com.baomidou.mybatisplus.enums.IdType;
 2 import com.baomidou.mybatisplus.annotations.TableId;
 3 import com.baomidou.mybatisplus.annotations.TableField;
 4 import com.baomidou.mybatisplus.annotations.TableName;
 5 
 6 import com.hztech.hzyy.init.base.BaseEntity;
 7 import lombok.Data;
 8 import lombok.experimental.Accessors;
 9 
10 /**
11  * <p>
12  * 新闻中心
13  * </p>
14  *
15  * @author ${author}
16  * @since 2019-11-23
17  */
18 @Data
19 @Accessors(chain = true)
20 @TableName("t_web_news")
21 public class News extends BaseEntity {
22 
23 
24     /**
25      * 自增ID
26      */
27     @TableId(value = "n_id", type = IdType.AUTO)
28     private Integer id;
29     /**
30      * 内容
31      */
32     @TableField("c_area")
33     private String area;
34     /**
35      * 封面
36      */
37     @TableField("c_cover")
38     private String cover;
39     /**
40      * 上下架默认0:1:下架;2:上架
41      */
42     @TableField("n_stand")
43     private Integer stand;
44     /**
45      * 标题
46      */
47     @TableField("c_title")
48     private String title;
49 
50 
51     @TableField("n_type")
52     private Integer type;
53 
54 
55 
56 }

 

原文地址:https://www.cnblogs.com/java-bhp/p/11982330.html