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 ...
随机推荐
- hive Hsql
show databases; use flume; show tables; desc flume; alter table table_name add columns(dt string); a ...
- JS 逻辑非!简单总结
!"" true!"aaa" false""==false true ...
- vue简单的v-for - - 路由跳转
前几天写了一个特特特简单的小图片页面,主要用到的就是v-for遍历以及路由跳转到详情页.路由跳转需要在router文件夹下index.js引入. 导航栏(element ui导航栏为模板): < ...
- 关于Visual Studio Code 以及 一些工具
常用插件 Path Intellisense 路径提示 open in browser 打开浏览器 ALT+B 代码块 ctrl + shift + p/或者设置(左下角右下角的齿轮)=> 命令 ...
- 3.VUE前端框架学习记录三:Vue组件化编码1
VUE前端框架学习记录三:Vue组件化编码1文字信息没办法描述清楚,主要看编码Demo里面,有附带完整的代码下载地址,有需要的同学到脑图里面自取.脑图地址http://naotu.baidu.com/ ...
- ZYNQ跑系统 系列(二) petalinux方式移植linux
三.搭建petalinux工程 0.定位目录 先在shell中找一个准备存放工程的地方,(我的是home/hlf/PRO),命令行cd home/hlf/PRO 1.定位编译链 根据安装p ...
- .net core 控制台程序生成EXE
在项目上右键编辑xxx.csproj,添加一行 <RuntimeIdentifier>win7-x64</RuntimeIdentifier>
- Python3.5-20190504-自我笔记浅拷贝和深拷贝
浅拷贝和深拷贝 (自己一直搞不懂的) 1.直接赋值(把一个变量直接赋值给另一个变量),他们指向同一个内存的数据(右边的图不知道怎么画,就直接截图过来了.将就看看) ------------- 2.使用 ...
- ubuntu root用户 phpstorm软件不能使用中文输入法
一. 在 ~/.bashrc 里面加入 export GTK_IM_MODULE=fcitx export QT_IM_MODULE=fcitx export XMODIFIERS="@im ...
- 第二节:链接mongodb服务器
查看mongodb的使用说明 版本是3.6.0 options 选项 指的是用户名和密码 address 数据库地址 数据库格式是 ip:端口/数据库 192.168.0.5:999/foo 链接本 ...