mybatis-plus 实现自动填充时间
1.引入pom依赖
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.2</version></dependency><!-- 时间格式化需要--><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>4.6.17</version></dependency>
2.编写基类,将时间放入基类,po继承基类
@Data
@FieldNameConstants
@EqualsAndHashCode(callSuper = false)
public class BaseEntity<T> extends Model {private static final long serialVersionUID = 1L;/*** 创建时间**/@TableField(fill = FieldFill.INSERT)//传给前端展示格式化后的时间@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")protected LocalDateTime createTime;/*** 更新时间**/@TableField(fill = FieldFill.INSERT_UPDATE)@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")protected LocalDateTime updateTime;
FieldFill.INSERT:该字段在插入时填充。
FieldFill.INSERT_UPDATE:该字段在插入更新时填充。
格式化注解:
@DateTimeFormat(pattern=“yyyy-MM-dd”):反序列化生效
用于将前端传的字符串日期转为日期类型(入参格式化)
@DateTimeFormat 注解的 pattern 属性值指定的日期时间格式并不是将要转换成的日期格式,这个指定的格式是和传入的参数对应的
假如注解为:@DateTimeFormat(pattern=“yyyy/MM/dd HH:mm:ss”)则传入的参数应该是这样的:2022/06/02 12:01:22
** @JsonFormat(timezone = “GMT+8”,pattern = “yyyy-MM-dd”): 序列化生效**
用于将后端日期格式化后返回给前端(出参格式化),默认采用国际标准时间GMT进行格式化的,而在国内默认时区使用的是CST时区,两者相差8小时需要添加属性timezone = “GMT+8” 来同步。
@JsonSerialize(using = LocalDateTimeSerializer.class):使用LocalDateTimeSerializer组件序列化字段
此注解用于属性或者getter方法上,用于在序列化时嵌入开发者自定义的代码。
1)首先定义一个处理序列化的类继承JsonSerializer类并实现serialize方法。
public class MyDateSerialize extends JsonSerializer<Date> {//定义日期格式private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");@Overridepublic void serialize(Date date, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException {jsonGenerator.writeString(sdf.format(date));}}
2)在属性上使用注解标识
@JsonSerialize(using = MyDateSerialize .class)
@JsonDeserialize(using = LocalDateTimeDeserializer.class):使用LocalDateTimeDeserializer组件反序列化字段
此注解用于属性或者setter 方法上,用于在反序列化时嵌入开发者自定义的代码。
1)首先定义一个处理反序列化的类继承JsonDeserializer类并实现deserialize方法。
public class MyJsonDeserializer extends JsonDeserializer<Date>
{public static final SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");@Overridepublic Date deserialize(com.fasterxml.jackson.core.JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, com.fasterxml.jackson.core.JsonProcessingException {try{if(jsonParser!=null&&StringUtils.isNotEmpty(jsonParser.getText())){return format.parse(jsonParser.getText());}else {return null;}}catch(Exception e){System.out.println(e.getMessage());throw new RuntimeException(e);}}
}
2)使用
@JsonDeserialize(using = MyJsonDeserializer .class)
这两种通常使用在客户端的入参和服务端出参不同时,如性别前端展示男或女,服务器一般1或2这样不相同但存在对应关系的可以使用这两个注解自动完成映射。
3.po实现该基类
@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName("t_dept")
@Builder
public class Dept extends BaseEntity<Dept> implements Serializable {private static final long serialVersionUID = 1L;/** 部门ID */@TableId(value="dept_id" ,type=IdType.INPUT)private Long deptId;/** 父部门ID */@TableField("parent_id")private Long parentId;/** 部门名称 */private String name;/** 显示顺序 越大代表在父级中排列越靠前*/private Integer orderNum;/** 负责人 department_leader*/@TableField("leader")private String departmentLeader;}
4.编写填充时间数据
MetaObjectHandler 是mybatis-plus提供的插件,insertFill可实现在插入时对字段进行自定义填充,updateFill在更新时对字段进行自定义填充。
@Component
public class AutoFillMetaInfoHandler implements MetaObjectHandler {@Overridepublic void insertFill(MetaObject metaObject) {//如果属性有值则不覆盖,如果填充值为null则不填充.this.strictInsertFill(metaObject, BaseEntity.Fields.createTime, LocalDateTime.class, LocalDateTime.now());this.strictInsertFill(metaObject, BaseEntity.Fields.updateTime, LocalDateTime.class, LocalDateTime.now());}@Overridepublic void updateFill(MetaObject metaObject) {//无论属性是否有值都填充this.setFieldValByName(BaseEntity.Fields.updateTime, LocalDateTime.now(), metaObject);}
}
5.测试
5.1 新增
createTime和updateTime都填充了。
在这里插入代码片
5.2 更新
@Testpublic void testUpdate(){deptService.updateById(Dept.builder().deptId(1L).name("test").build());}
结果:
只有更新时间填充了。
6.生效与失效场景
填充生效场景:
updateById(T entity) updateBatchById(Collection<T> entityList)
saveOrUpdate(T entity) save(T entity) update(T t,Wrapper
updateWrapper),t不能为空,否则自动填充失效 LambdaQueryWrapper<User> wrapper= new
LambdaQueryWrapper<>(new User()); LambdaUpdateWrapper<User> wrapper =
Wrappers.lambdaUpdate(new User());
填充不生效场景:
update(Wrapper updateWrapper)
检查字段有没有加上注解 @TableField(fill = FieldFill.INSERT_UPDATE)
有没有实现 MetaObjectHandler 接口 ,并且加入到 Spring 容器中
xml 写的也无效
mybatis-plus 实现自动填充时间相关推荐
- MyBatis-plus自动填充功能之自动填充时间
MyBatis-plus自动填充功能之自动填充时间 一.前期工作 二.自动填充 2.1 数据库级别 2.2 代码级别 在实际操作过程中,我们并不希望创建时间.修改时间这些来手动进行,而是希望通过自动化 ...
- asp按时间自动递增编号_Excel自动填充日期与每次递增3分钟的时间且批量生成编号,用快捷键填充当前日期...
在 Excel 中,除数字可以自动填充外,日期和时间也可以自动填充:其中日期可按日.月.年和工作日填充,时间可按每次递增时分秒填充.日期填充方法有三种,一种是用拖动的办法自动填充,第二种是用双击单元格 ...
- MybatisPlus实现自动填充
自动填充 项目中经常会遇到一些数据,每次都使用相同的方式填充,例如记录的创建时间,更新时间等. 我们可以使用MyBatis Plus的自动填充功能,完成这些字段的赋值工作: (1)数据库表中添加自动填 ...
- ssm框架逻辑删除mysql_MybatisPlus--CRUD接口及主键增长策略、自动填充、乐观锁更新数据...
目录 一.insert 1.插入操作 2.主键策略 二.update 1.根据Id更新操作 2.自动填充 3.乐观锁 三.select 1.根据id查询记录 2.通过多个id批量查询 3.简单的条件查 ...
- 尚医通——后台搭建——MybatisPlus自动填充和乐观锁
目录标题 自动填充和乐观锁 1.更新操作 2.自动填充 1.1数据库修改 1.2实体类修改 1.3实现元对象处理器接口 3.乐观锁 3.1场景 4.乐观锁实现流程 4.1修改实体类 4.2创建配置文件 ...
- spring自动填充
spring自动填充 实体 传值 参考文档 这是mybatis提供的自动填充,所以springboot 需要整合mybatis之后重写mybatis的jar包里的方法 实体 实体需要加上@TableF ...
- MyBatisPlus自动填充
MyBatisPlus自动填充 项目中经常会遇到一些数据,每次都使用相同的方式填充,例如记录的创建时间,更新时间等. 我们可以使用MyBatis Plus的自动填充功能,完成这些字段的赋值工作; (1 ...
- mybatis 自动填充无效_开发小知识-mybatis-plus自动填充与读写分离
mybatis-plus 自动填充 说明 我们在设计表结构的时候,往往会额外添多如下几个字段 create_time[表字段]-- createTime[实体字段] : 创建时间 update_tim ...
- 【Mybatis系列】之插件—自动填充字段插件,再也不需要手动填写或者耦合业务了!
Mybatis是一个非常流行的Java ORM框架,它为开发者提供了一种简单的方式来操作关系型数据库.Mybatis插件是Mybatis的一个重要扩展功能,它允许开发者通过自定义插件来增强Mybati ...
最新文章
- 敏捷开发实践总结(二):关于测试
- python顺序执行多个py文件的方法
- C和C++中的野指针问题
- 生理周期,POJ(1006)
- Redhat Enterprise Linux 5 实战系列(六)为RHEL5开启samba
- 【启智树NOIP模拟】奇偶【卢卡斯定理】【背包】【bitset】
- Ajax学习总结+案例
- python 使用异常函数_您如何测试Python函数引发异常?
- Hadoop中Partition解析
- C#中完美克隆引用类型的对象
- ibm x3650 服务器安装系统安装,IBM服务器X3650安装操作系统步骤
- 低频声音功率放大器电子设计报告
- 几个比较实用的网址链接
- 小学计算机教学笔记,信息技术在小学数学教学的运用
- 压电传感器用于车辆测速和承重、车型识别
- Docker操作镜像源
- typedef 用法详解
- leetcode初级———旋转数组的多种算法总结
- Excel 中用公式列出唯一值——模拟高级筛选功能
- 微电网优化调度|农村农业区可再生能源微电网优化调度(Python代码实现)
热门文章
- hrbust 哈理工oj 1418 夏夜星空【带权并查集】
- 详解kmalloc、vmalloc
- base-kernel-partion
- 秋招面试总结:Java+并发+Spring+MySQL+分布式+Redis+算法+JVM等
- chrome插件开发之:一键购物助手功能开发总结
- 数组和字符串的相互转换---------数组转换为字符串
- 二分图最大匹配——匈牙利算法
- [Unity3D学习]Unity代码热更新 源码下载
- MATLAB之傅里叶变换,快速傅里叶变换FFT
- 99乘法口诀表python语言代码_python 99乘法口诀表