1. 程式人生 > >mybatis 與sqlserver相關的批量插入的問題

mybatis 與sqlserver相關的批量插入的問題

專案上遇到一個關於sqlserver批量插入的問題,持久層框架是mybatis;
開始採用的批量插入方法如下圖:
INSERT INTO numas_qos_cri_rating_level(cri_id,rating_level_id,operator1,number1,operator2,number2)
<foreach collection="levelList" item="param" separator=" union all ">
SELECT
    #{criId,jdbcType=INTEGER},
    #{param.ratingLevelId,jdbcType=INTEGER},
    #{param.operator1,jdbcType=VARCHAR},
    #{param.number1,jdbcType=NUMERIC},
    #{param.operator2,jdbcType=VARCHAR},
    #{param.number2,jdbcType=DECIMAL}
</foreach>
正常批量插入的時候是沒什麼問題。但是,number1和number2在後端是用的bigdecimal儲存(後面說的整數跟小數都是前端傳回來的資料格式),當list中number1或者
number2既有小數,又有整數的時候,或者是小數跟null值,即list{(number1=1.13,number2=1.13),(number1=2,number2=null)的時候,存入資料庫時number1和
number2都會被改變,number1會存1,和2,number2會存1跟null。當number1跟number2都為小數的時候則正常儲存。
下面是改變後的批量插入語句:
<foreach 
collection="levelList" item="param" separator=";" index="index"> INSERT INTO numas_qos_cri_rating_level(cri_id,rating_level_id,operator1,number1,operator2,number2) values ( #{criId,jdbcType=INTEGER}, #{param.ratingLevelId,jdbcType=INTEGER}, #{param.operator1,jdbcType=VARCHAR}, #{param.number1,jdbcType=NUMERIC}, #{param.operator2,jdbcType=VARCHAR}, #{param.number2,jdbcType=NUMERIC} ) </foreach>
先行記錄一下,有知道上面值為什麼會被改變的小夥伴可以指導一下,之後準備再去查詢一下文件看看