mybatis 解决将数值0识别成空字符串的问题

 更新时间:2021年06月15日 12:01:03   作者:云原生手记  
这篇文章主要介绍了mybatis 解决将数值0识别成空字符串的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

今天遇到一个问题

我在用java的BigDecimal对象时,值是0.00000;该对象不是空的,是new出来的,我需要将该值插入数据库,数据库对于该值的接收字段类型是decimal。

我使用的Mybatis。mybatis中的语句大致如下:

       UPDATE user_consumption 
  <trim prefix="SET" suffixOverrides=",">
            <if test="totalConsumption!=null" and totalConsumption!=''>
            total_consumption = #{totalConsumption},
            </if>
  </trim>  
        WHERE 
         id = #{id} and state = 'A'

其中totalConsumption就是java对象中类型为BigDecimal的对象,该变量映射到数据库表中的字段是total_consumption。但是你mybatis的xml文件中的语句如上述缩写,你需要设的值是0.00000,此时运行的时候你会发现报错,报错如下:

报错指出sql语句是这样子的,没有需要set的值

UPDATE user_consumption   WHERE id = #{id} and state = 'A'

从报错的语句可以看出,Mybatis认为totalConsumption这个量是null或者空字符串,但是totalConsumption明明是New出来的,不会是空的,那么唯一的可能就是mybatis将值为0.00000的totalConsumption识别为空字符串了,事实也确实如此,改天我会看看源代码,再贴到这边,以后记住mybatis 会将数值0识别成空字符串。

解决方式:

对于上述的问题的修改就是将判断空字符串的判断语句去掉即可。但是这并不是通用解决方案,因为我问题中的BigDecimal是需要New出来的,就算不是New出来的,也不会在进入mybatis之前变成空字符串,所以我可以直接把空字串去掉,

        UPDATE user_consumption 
  <trim prefix="SET" suffixOverrides=",">
            <if test="totalConsumption!=null">
            total_consumption = #{totalConsumption},
            </if>
  </trim>  
        WHERE 
         id = #{id} and state = 'A'

但是对于那些不需要new的数据类型,就比如你Java中是Integer,此时你最好把类型换成string,就不会出现这种情况了。

mybatis 获取数据为null(注解方式)

在使用 muybatis 获取 mysql 的日期数据的时候,其中一个数据一直为空,而其他在同一实体中的数据却可以正常获取。

此种情况很可能是 mysql 中的数据与 java 实体类数据映射失败的原因,使用注解开发时,要求实体类数据中属性必须和 mysql 中的属性名一致(除非你进行映射转换的配置),可以忽略大小写。

这次的问题就在于其中一个属性少写了一个字母,导致和mysql 那边匹配不上

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • SWT(JFace)体验之FormLayout布局

    SWT(JFace)体验之FormLayout布局

    SWT(JFace)体验之FormLayout布局示例代码。
    2009-06-06
  • Java notify和notifyAll的区别和相同

    Java notify和notifyAll的区别和相同

    本文主要介绍Java notify和notifyAll的知识,这里整理详细的资料来说明notify 和NotifAll的区别,有需要的小伙伴可以参考下
    2016-09-09
  • Java中避免写嵌套if样式的代码详解

    Java中避免写嵌套if样式的代码详解

    这篇文章主要给大家介绍了在Java中如何避免写嵌套if样式的相关资料,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面跟着小编一起来学习学习吧。
    2017-07-07
  • JDK8中新增的Optional工具类基本使用

    JDK8中新增的Optional工具类基本使用

    Optional不是对null关键字的一种替代,而是对于null判定提供了一种更加优雅的实现,接下来通过本文给大家分享JDK8中新增的Optional工具类基本使用,感兴趣的朋友跟随小编一起看看吧
    2021-06-06
  • 使用Feign传递请求头信息(Finchley版本)

    使用Feign传递请求头信息(Finchley版本)

    这篇文章主要介绍了使用Feign传递请求头信息(Finchley版本),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • 模仿Spring手写一个简易的IOC

    模仿Spring手写一个简易的IOC

    这篇文章主要介绍了模仿Spring手写一个简易的IOC,帮助大家更好的理解和学习spring框架,感兴趣的朋友可以了解下
    2020-11-11
  • SpringBoot项目中jar发布获取jar包所在目录路径的最佳方法

    SpringBoot项目中jar发布获取jar包所在目录路径的最佳方法

    在开发过程中,我们经常要遇到上传图片、word、pdf等功能,但是当我们把项目打包发布到服务器上时,对应的很多存储路径的方法就会失效,下面这篇文章主要给大家介绍了关于SpringBoot项目中jar发布获取jar包所在目录路径的相关资料
    2022-07-07
  • springboot下mybatis-plus开启打印sql日志的配置指南

    springboot下mybatis-plus开启打印sql日志的配置指南

    这篇文章主要给大家介绍了关于springboot下mybatis-plus开启打印sql日志的配置指南的相关资料,还介绍了关闭打印的方法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-03-03
  • Spring Boot利用@Async如何实现异步调用:自定义线程池

    Spring Boot利用@Async如何实现异步调用:自定义线程池

    这篇文章主要给大家介绍了关于Spring Boot利用@Async如何实现异步调用:自定义线程池的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2018-05-05
  • 关于Java多线程编程锁优化的深入学习

    关于Java多线程编程锁优化的深入学习

    本篇文章是关于Java多线程编程锁优化的深入学习总结内容,对Java锁优化有兴趣的朋友跟着学习下吧。
    2018-01-01

最新评论