项目上遇到一个关于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>
先行记录一下,有知道上面值为什么会被改变的小伙伴可以指导一下,之后准备再去查找一下文档看看