zoukankan      html  css  js  c++  java
  • 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 }

     

  • 相关阅读:
    react脚手架
    快速创建一个node后台管理系统
    vue脚手架结构及vue-router路由配置
    Spring 事务管理-只记录xml部分
    Spring-aspectJ
    Maven 自定义Maven插件
    JVM
    JVM
    Spring
    Digester
  • 原文地址:https://www.cnblogs.com/java-bhp/p/11982330.html
Copyright © 2011-2022 走看看