mybatis 在存储Integer、bigdecimal等java数据类型时,将0存成null

我们的项目中,有关于金额的计算,所以,一般在java环境中我们使用bigdecimal来做运算和存储金额信息。数据库sqlServer2008用的float类型

问题是,当我将金额赋值成0时,很意外的发现数据库存储的是null. 我的持久层框架用的mybatis。

在查阅了一翻资料后发现,原来是我在判断金额类型时,一个不规范的错误导致的,直接上代码。

–有问题代码 PS我的maypper文件

<?xml version=”1.0″ encoding=”UTF-8″?>
<!DOCTYPE mapper PUBLIC “-//mybatis.org//DTD Mapper 3.0//EN”
“http://mybatis.org/dtd/mybatis-3-mapper.dtd”>
<mapper namespace=”com.travesky.bluesky.dao.tkt.OrdTktDataDao”>
<!– 对于sqlserver数据库浮点型数据如果传入null则会抛出字符串转数值异常,下面通过判断来解决 –>
<!– <if test=”comm ==null or comm==””> –>
<!– null, –>
<!– </if> –>
<!– <if test=”comm !=null and comm!=””> –>
<!– #{comm}, –>
<!– </if> –>
<!– 插入数据 –>
<insert id=”insertOrdTktData” parameterType=”com.travesky.bluesky.model.tkt.OrdTktDataModel”
useGeneratedKeys=”true” keyProperty=”tktdataid” >
insert into T_BLUESKY_ORD_TKTDATA
(

comm
)
values(

<!– comm begin –>
<if test=”comm == null or comm==” ” >   ——–就是这里,做了一个判断是否是空串的判断
null,
</if>
<if test=”comm !=null and or comm!=””>
#{comm},
</if>
<!– comm end –>

)
</insert>
</mapper>

———–就是因为我做了一个空串的判断,导致mybatis会按照字符串来解析属性。这就尴尬了。首先既然是封装数据类型,不可能有空串的可能性,所以这里应该只判断是够为null就可以了。

—-正确写法

<?xml version=”1.0″ encoding=”UTF-8″?> 
<!DOCTYPE mapper PUBLIC “-//mybatis.org//DTD Mapper 3.0//EN” 
“http://mybatis.org/dtd/mybatis-3-mapper.dtd”> 
<mapper namespace=”com.travesky.bluesky.dao.tkt.OrdTktDataDao”> 

<!– 插入数据 –> 
<insert id=”insertOrdTktData” parameterType=”com.travesky.bluesky.model.tkt.OrdTktDataModel”
useGeneratedKeys=”true” keyProperty=”tktdataid” >
insert into T_BLUESKY_ORD_TKTDATA
(

comm

values(

<!– comm begin –>
<if test=”comm == null ” >   ——–就是这里,做了一个判断是否是空串的判断
null,
</if>
<if test=”comm !=null”>
#{comm},
</if>
<!– comm end –>

)
</insert>
</mapper>

 

具体的详细问题分析,大家可以参考http://blog.csdn.net/qing_gee/article/details/50518795

    原文作者:MyBatis
    原文地址: https://www.cnblogs.com/ANCAN-RAY/p/7084074.html
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞