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 实现自动填充时间相关推荐

  1. MyBatis-plus自动填充功能之自动填充时间

    MyBatis-plus自动填充功能之自动填充时间 一.前期工作 二.自动填充 2.1 数据库级别 2.2 代码级别 在实际操作过程中,我们并不希望创建时间.修改时间这些来手动进行,而是希望通过自动化 ...

  2. asp按时间自动递增编号_Excel自动填充日期与每次递增3分钟的时间且批量生成编号,用快捷键填充当前日期...

    在 Excel 中,除数字可以自动填充外,日期和时间也可以自动填充:其中日期可按日.月.年和工作日填充,时间可按每次递增时分秒填充.日期填充方法有三种,一种是用拖动的办法自动填充,第二种是用双击单元格 ...

  3. MybatisPlus实现自动填充

    自动填充 项目中经常会遇到一些数据,每次都使用相同的方式填充,例如记录的创建时间,更新时间等. 我们可以使用MyBatis Plus的自动填充功能,完成这些字段的赋值工作: (1)数据库表中添加自动填 ...

  4. ssm框架逻辑删除mysql_MybatisPlus--CRUD接口及主键增长策略、自动填充、乐观锁更新数据...

    目录 一.insert 1.插入操作 2.主键策略 二.update 1.根据Id更新操作 2.自动填充 3.乐观锁 三.select 1.根据id查询记录 2.通过多个id批量查询 3.简单的条件查 ...

  5. 尚医通——后台搭建——MybatisPlus自动填充和乐观锁

    目录标题 自动填充和乐观锁 1.更新操作 2.自动填充 1.1数据库修改 1.2实体类修改 1.3实现元对象处理器接口 3.乐观锁 3.1场景 4.乐观锁实现流程 4.1修改实体类 4.2创建配置文件 ...

  6. spring自动填充

    spring自动填充 实体 传值 参考文档 这是mybatis提供的自动填充,所以springboot 需要整合mybatis之后重写mybatis的jar包里的方法 实体 实体需要加上@TableF ...

  7. MyBatisPlus自动填充

    MyBatisPlus自动填充 项目中经常会遇到一些数据,每次都使用相同的方式填充,例如记录的创建时间,更新时间等. 我们可以使用MyBatis Plus的自动填充功能,完成这些字段的赋值工作; (1 ...

  8. mybatis 自动填充无效_开发小知识-mybatis-plus自动填充与读写分离

    mybatis-plus 自动填充 说明 我们在设计表结构的时候,往往会额外添多如下几个字段 create_time[表字段]-- createTime[实体字段] : 创建时间 update_tim ...

  9. 【Mybatis系列】之插件—自动填充字段插件,再也不需要手动填写或者耦合业务了!

    Mybatis是一个非常流行的Java ORM框架,它为开发者提供了一种简单的方式来操作关系型数据库.Mybatis插件是Mybatis的一个重要扩展功能,它允许开发者通过自定义插件来增强Mybati ...

最新文章

  1. 敏捷开发实践总结(二):关于测试
  2. python顺序执行多个py文件的方法
  3. C和C++中的野指针问题
  4. 生理周期,POJ(1006)
  5. Redhat Enterprise Linux 5 实战系列(六)为RHEL5开启samba
  6. 【启智树NOIP模拟】奇偶【卢卡斯定理】【背包】【bitset】
  7. Ajax学习总结+案例
  8. python 使用异常函数_您如何测试Python函数引发异常?
  9. Hadoop中Partition解析
  10. C#中完美克隆引用类型的对象
  11. ibm x3650 服务器安装系统安装,IBM服务器X3650安装操作系统步骤
  12. 低频声音功率放大器电子设计报告
  13. 几个比较实用的网址链接
  14. 小学计算机教学笔记,信息技术在小学数学教学的运用
  15. 压电传感器用于车辆测速和承重、车型识别
  16. Docker操作镜像源
  17. typedef 用法详解
  18. leetcode初级———旋转数组的多种算法总结
  19. Excel 中用公式列出唯一值——模拟高级筛选功能
  20. 微电网优化调度|农村农业区可再生能源微电网优化调度(Python代码实现)

热门文章

  1. hrbust 哈理工oj 1418 夏夜星空【带权并查集】
  2. 详解kmalloc、vmalloc
  3. base-kernel-partion
  4. 秋招面试总结:Java+并发+Spring+MySQL+分布式+Redis+算法+JVM等
  5. chrome插件开发之:一键购物助手功能开发总结
  6. 数组和字符串的相互转换---------数组转换为字符串
  7. 二分图最大匹配——匈牙利算法
  8. [Unity3D学习]Unity代码热更新 源码下载
  9. MATLAB之傅里叶变换,快速傅里叶变换FFT
  10. 99乘法口诀表python语言代码_python 99乘法口诀表