详解Mybatis-plus中更新date类型数据遇到的坑
最近一年的项目都是在使用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,可以根据自己需要进行设置。
我个人还是选择了第一种解决方案,因为进行全局配置的时候,必须保证每次的传参都是全的,要不然会将数据置空或者没有将必填字段传值的时候会报错。
到此这篇关于详解Mybatis-plus中更新date类型数据遇到的坑的文章就介绍到这了,更多相关Mybatis-plus更新date类型内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
SpringMVC的组件之HandlerExceptionResolver详解
这篇文章主要介绍了SpringMVC的组件之HandlerExceptionResolver详解,不管是在处理请求映射(HandlerMapping),还是在请求被处理(Handler)时抛出的异常,DispatcherServlet都会委托给HandlerExceptionResolver进行异常处理,该接口只有一个方法,需要的朋友可以参考下2023-10-10在springboot中注入FilterRegistrationBean不生效的原因
这篇文章主要介绍了在springboot中注入FilterRegistrationBean不生效的原因及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-08-08Spring Boot自定义Starter组件开发实现配置过程
SpringBoot中的starter是一种非常重要的机制,能够抛弃以前繁杂的配置,将其统一集成进 starter,应用者只需要在maven中引入starter依赖,这篇文章主要介绍了Spring Boot自定义Starter组件开发实现,需要的朋友可以参考下2022-06-06java读取文件:char的ASCII码值=65279,显示是一个空字符的解决
这篇文章主要介绍了java读取文件:char的ASCII码值=65279,显示是一个空字符的解决,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2020-08-08java组件commons-fileupload实现文件上传
这篇文章主要介绍了java借助commons-fileupload组件实现文件上传,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2016-10-10
最新评论