mybatis批量更新的mapper语句:
<update id="batchUpdateVmQueueUp" parameterType="java.util.List">
<foreach collection="list" item="item" separator=";">
update vm_queue_up
<trim prefix="SET" suffixOverrides=",">
<if test="item.code != null">code = #{item.code},</if>
<if test="item.queueOrder != null">queue_order = #{item.queueOrder},</if>
<if test="item.orderNumber != null">order_number = #{item.orderNumber},</if>
<if test="item.plateNumber != null">plate_number = #{item.plateNumber},</if>
<if test="item.factoryTime != null">factory_time = #{item.factoryTime},</if>
<if test="item.queueTime != null">queue_time = #{item.queueTime},</if>
<if test="item.entryTime != null">entry_time = #{item.entryTime},</if>
<if test="item.queueNum != null">queue_num = #{item.queueNum}</if>
</trim>
where id = #{item.id}
</foreach>
</update>
明明自己格式语法都是正确的但在执行的时候就会报错;报错信息如下
### SQL: update vm_queue_up SET queue_order = ?, plate_number = ?, factory_time = ?where id = ? ; update vm_queue_up SET queue_order = ?, plate_number = ?, factory_time = ? where id = ? ; update vm_queue_up SET queue_order = ?, order_number = ?, plate_number = ?, factory_time = ?where id = ? ; update vm_queue_up SET queue_order = ?, order_number = ?, plate_number = ?, factory_time = ? where id = ? ### Cause: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'update vm_queue_up SET queue_order = '2', ' at line 13 ; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'update vm_queue_up SET queue_order = '2',
结果百度才知道原来是mysql的url连接池没有添加参数
allowMultiQueries=true
url: jdbc:mysql://127.0.0.1:3306/db_nbe2?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=true
告诉mysql允许同时执行多条sql语句(mysql默认未开启同时执行多条sql),至此就能成功执行批量更新啦!!!但这样会导致有sql注入的风险,所以要做好相关的应对措施。