MybatisPlus自动填充公共字段的策略
背景:数据库中多个表有时间字段,并且字段名一致
需求:该时间字段由MybatisPlus自动插入和更新,业务代码无需处理
方法:
一、创建基础实体【BaseEntity】,定义需要处理的公共字段(创建时间、修改时间、创建人、修改人、备注……),供其他业务实体类继承
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.enums.FieldFill;
import lombok.Data; import java.io.Serializable;
import java.util.Date; /**
* @ClassName BaseEntity
* @Description 定义时间的基类
* @Author AAFE
* @Date 2019/12/3 17:39
* @Version 1.0
**/
@Data
public class BaseEntity implements Serializable { @TableField(value = "d_create_time", fill = FieldFill.INSERT)
private Date createTime; @TableField(value = "d_update_time", fill = FieldFill.INSERT_UPDATE)
private Date updateTime; }
二、创建元数据处理器【MetaHandler】,继承自MetaObjectHandler
import com.baomidou.mybatisplus.mapper.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component; import java.util.Date; /**
* @ClassName MetaHandler
* @Description 处理新增和更新的基础数据填充,配合BaseEntity和MyBatisPlusConfig使用
* @Author AAFE
* @Date 2019/12/3 17:28
* @Version 1.0
**/
@Component
public class MetaHandler extends MetaObjectHandler { /**
* 新增数据执行
* @param metaObject
*/
@Override
public void insertFill(MetaObject metaObject) {
this.setFieldValByName("createTime", new Date(), metaObject);
this.setFieldValByName("updateTime", new Date(), metaObject);
} /**
* 更新数据执行
* @param metaObject
*/
@Override
public void updateFill(MetaObject metaObject) {
this.setFieldValByName("updateTime", new Date(), metaObject);
} }
三、创建配置文件【MybatisPlusConfig】,全局注入元数据处理器
import com.baomidou.mybatisplus.spring.boot.starter.GlobalConfig;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; /**
* @ClassName MyBatisPlusConfig
* @Description 插件配置
* @Author AAFE
* @Date 2019/12/3 17:26
* @Version 1.0
**/
@Configuration
public class MyBatisPlusConfig {
/**
* 自动填充功能
* @return
*/
@Bean
public GlobalConfig globalConfig() {
GlobalConfig globalConfig = new GlobalConfig();
globalConfig.setMetaObjectHandler(String.valueOf(new MetaHandler()));
return globalConfig;
}
}
四、创建业务实体类【News】,该实体在进行增加/更新时,时间字段会自动插入数据库,无需代码处理
import com.baomidou.mybatisplus.enums.IdType;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableName; import com.hztech.hzyy.init.base.BaseEntity;
import lombok.Data;
import lombok.experimental.Accessors; /**
* <p>
* 新闻中心
* </p>
*
* @author ${author}
* @since 2019-11-23
*/
@Data
@Accessors(chain = true)
@TableName("t_web_news")
public class News extends BaseEntity { /**
* 自增ID
*/
@TableId(value = "n_id", type = IdType.AUTO)
private Integer id;
/**
* 内容
*/
@TableField("c_area")
private String area;
/**
* 封面
*/
@TableField("c_cover")
private String cover;
/**
* 上下架默认0:1:下架;2:上架
*/
@TableField("n_stand")
private Integer stand;
/**
* 标题
*/
@TableField("c_title")
private String title; @TableField("n_type")
private Integer type; }
MybatisPlus自动填充公共字段的策略的更多相关文章
- mybatis-plus自动填充
1,给字段添加注解 @TableField(value = "create_time", fill = FieldFill.INSERT) 2,添加填充处理器,需要实现接口Meta ...
- mybatis自动填充时间字段
对于实体中的created_on和updated_on来说,它没有必要被开发人员去干预,因为它已经足够说明使用场景了,即在插入数据和更新数据时,记录当前时间,这对于mybatis来说,通过拦截器是可以 ...
- 暑假撸系统3- petty热更新 mybatis自动填充时间字段!
经过了昨天纠结技术选型,和一大堆xml配置,终于把架子搭好了.因为最近一次做java项目也在好多年以前了(毕竟用了pytohn以后谁也不想再回来java了),java的生态发生了长足的进步,本来想从原 ...
- SpringBoot-Mybatis_Plus学习记录之公共字段自动填充
一.应用场景 平时在建对象表的时候都会有最后修改时间,最后修改人这两个字段,对于这些大部分表都有的字段,每次在新增和修改的时候都要考虑到这几个字段有没有传进去,很麻烦.mybatisPlus有一个很好 ...
- mybatis plus 增删改自动填充字段值
说明 本文实现以下需求效果 创建数据时自动填充 createUserId 和 createTime 更新数据时自动填充 updateUserId 和 updateTime(每次修改都自动填充新的 up ...
- 小书MybatisPlus第9篇-常用字段默认值自动填充
本文为Mybatis Plus系列文章的第9篇,前8篇访问地址如下: 小书MybatisPlus第1篇-整合SpringBoot快速开始增删改查 小书MybatisPlus第2篇-条件构造器的应用及总 ...
- 如何自动填充SQL语句中的公共字段
1. 前言 我们在设计数据库的时候一定会带上新增.更新的时间.操作者等审计信息. 之所以带这些信息是因为假如有一天公司的数据库被人为删了,尽管可能有数据库备份可以恢复数据.但是我们仍然需要追踪到这个事 ...
- 【mybatis-plus】主键id生成、字段自动填充
一.主键id的生成 数据库表里通常都会有一个主键id,来作为这条数据的唯一标识. 常见的方式 数据库自动增长 这种很常见了,可以做到全库唯一.因为id是天然排序的,对于涉及到排序的操作会很方便. UU ...
- mybatis-plus时间字段自动填充
时间代码自动填充的2种方式 数据库方式 将数据库字段create_time和update_time设置CURRENT_TIMESTAMP,create_time字段后面不需要勾选更新,update_t ...
随机推荐
- direct模式下的收发
生产者 import pika import sys connection = pika.BlockingConnection(pika.ConnectionParameters( host='loc ...
- Linux学习笔记4-CentOS7中redis3.2.9安装教程
redis下载地址:http://www.redis.cn/download.html 1.将下载过来的redis-3.2.9.tar.gz文件复制到/usr/local文件夹下 2.tar xzf ...
- ivew 【provide/inject] 页面刷新实现reload
1.App.vue <template> <div id="app"> <router-view v-if="isRouterAlive&q ...
- 【串线篇】sql映射文件-分布查询(上)association 1-1
1.场景 1把钥匙带1把锁 JavaBean:private Lock lock;//当前钥匙能开哪个锁: 1). interface KeyDao: public Key getKeyByIdSim ...
- 牛客网NOIP赛前集训营-提高组(第六场)B-选择题
题目描述 有一道选择题,有 a,b,c,d 四个选项. 现在有 n 个人来做这题,第 i 个人有 pi,j 的概率选第 j 个选项. 定义\(cnt(x)\)为选第$ x $个选项的人数. 令\(mx ...
- 太可怕了!黑客是如何攻击劫持安卓用户的DNS?
最近发现的针对Android设备的广泛路由器的DNS劫持恶意软件现在已升级为针对iOS设备以及桌面用户的功能. 被称为RoamingMantis的恶意软件最初发现在上个月劫持了互联网路由器,以散布旨在 ...
- MySQL添加主键、索引
查看索引 SHOW INDEX FROM 数据库表名 比如:SHOW INDEX FROM order_info; 添加索引 alter table 数据库add index 索引名称(数据库字段 ...
- JavaScript之ECMAScript
JavaScript脚本语言, 运行在浏览器上,无需编译, 轻量级的语言. 功能:让页面有执行逻辑的功能, 可以产生一些动态的效果 JavaScript = ECMAScript + BOM + DO ...
- boost array
boost::array is similar to std::array, which was added to the standard library with C++11. With boos ...
- Dataphin数据服务系列之--API 配置、管理和消费
研发小哥哥还在为公司里大量 API 只上不下,不可查不可用, 想找的 API 找不到而苦恼吗?业务方小姐姐还在为 API 开发时间长,业务相应不及时而抱怨吐槽吗? 铛铛铛,Dataphin 数据服务 ...