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

猜你喜欢

转载自blog.csdn.net/qq_28364999/article/details/73845057