我們的項目中,有關於金額的計算,所以,一般在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