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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM