mybatis 與sqlserver相關的批量插入的問題
阿新 • • 發佈:2019-01-25
專案上遇到一個關於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都為小數的時候則正常儲存。
下面是改變後的批量插入語句:
<foreachcollection="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>
先行記錄一下,有知道上面值為什麼會被改變的小夥伴可以指導一下,之後準備再去查詢一下文件看看