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'
字符串长度为0从报错的语句可以看出,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 那边匹配不上
以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论