详解Mybatis-plus中更新date类型数据遇到的坑

作者:爱钓鱼的Java 时间:2022-08-17 21:43:14 

最近一年的项目都是在使用Mybatis-plus,感觉挺好用的,也没遇到很多问题,但是在最近项目上线之后,遇到了一些新的需要,在进行新版本开发的时候就开始遇到坑了,今天来说一下更新数据中有date类型数据的时候会出现的问题。

实体类部分字段如下:


@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ProductPo implements Serializable {
/**
  * 产品主键,自增
  */
 private Long prdId;
 /**
  * 名称
  */
 private String prdName;
 /**
  * 价格
  */
 private Bigdecimal prdPrice;
 /**
  * 上市日期
  */
 private LocalDate listingDate;
 /**
  * 创建时间
  */
 private LocalDateTime createTime;
 /**
  * 修改时间
  */
 private LocalDateTime updateTime;
}

如果在更新的时候,将上市日期(listingDate)由之前的“2020-07-16”更新为null:


ProductPo po = ProductPo.builder.prdId(request.getPrdId).listingDate(null).updateTime(now(3)).build;

更新语句分为两种,第一种:


Integer rows = prdMapper.update(po, Wrappers.<ProductPo>lambdaUpdate().eq(ProductPo::getPrdId, request.getPrdId()));

第二种:


Integer rows = prdMapper.updateById(po);

这个时候你会发现,上市日期(listingDate)并没有被更新为空;有可能是因为在更新的时候,mybatis-plus将date类型为空的时候过滤掉了。

解决方法一:在字段上面加标签,不进行空判断过滤


@TableField(strategy = FieldStrategy.IGNORED)
private LocalDate listingDate;

解决方法二:在yml配置文件中进行全局配置


#mybatis-plus mapper包扫描地址
mybatis-plus:
mapper-locations: classpath*:mapper/*/*.xml,classpath*:mapper/*.xml
config-location: classpath:/mybatis-config.xml
global-config:
 db-config:
  field-strategy: ignored

此处是对所有的操作都进行过滤,在官网上还有:insertStrategy,updateStrategy和selectStrategy,可以根据自己需要进行设置。
我个人还是选择了第一种解决方案,因为进行全局配置的时候,必须保证每次的传参都是全的,要不然会将数据置空或者没有将必填字段传值的时候会报错。

来源:https://blog.csdn.net/yuanwxcsdn/article/details/107375626

标签:Mybatis-plus,更新,date类型
0
投稿

猜你喜欢

  • java之使用多线程代替for循环(解决主线程提前结束问题)

    2021-11-21 01:23:55
  • java音乐播放器实现代码

    2022-08-29 08:41:22
  • 如何调用chatGPT实现代码机器人

    2023-06-05 02:09:33
  • Elasticsearch配置文件示例示范

    2021-11-05 22:59:31
  • Android实现拍照截图功能

    2023-06-21 04:43:23
  • Android实现遮罩层(蒙板)效果

    2023-04-26 18:43:03
  • C#6.0新语法示例详解

    2023-11-16 03:43:42
  • java中SynchronizedList和Vector的区别详解

    2023-08-23 10:13:12
  • Unity 使用TexturePacker打包图集的操作方法

    2021-08-30 18:48:17
  • Android开发之线程通信详解

    2022-08-21 21:37:34
  • C# FileStream实现大文件复制

    2021-06-14 11:00:53
  • Struts2拦截器登录验证实例

    2021-10-26 06:47:04
  • Java并发(Runnable+Thread)实现硬盘文件搜索功能

    2023-05-06 04:59:22
  • java中Class.forName方法的作用详解

    2021-07-08 21:47:31
  • java 基础之JavaBean属性命名规范问题

    2022-10-09 05:44:22
  • Java8新特性之类型注解_动力节点Java学院整理

    2023-10-10 16:13:07
  • Java 获取两个List的交集和差集,以及应用场景操作

    2021-11-21 17:49:43
  • java根据List内对象的属性排序方法

    2022-10-25 10:05:44
  • Spring内存缓存Caffeine的基本使用教程分享

    2023-05-26 00:30:33
  • springboot中bean的加载顺序问题

    2022-01-04 19:55:57
  • asp之家 软件编程 m.aspxhome.com