MySql+Mybatis+Druid:sql injection violation, multi-statement not allow解决
对于批量更新,有一种简单的写法,如下:
<update id="batchUpdate" parameterType="java.util.Map">
<!-- 接收list参数,循环着组装sql语句,注意for循环的写法
separator=";" 代表着每次循环完,在sql后面放一个分号
item="cus" 循环List的每条的结果集
collection="list" list 即为 map传过来的参数key -->
<foreach collection="list" separator=";" item="cus">
update t_customer set
c_name = #{cus.name},
c_age = #{cus.age},
c_sex = #{cus.sex},
c_ceroNo = #{cus.ceroNo},
c_ceroType = #{cus.ceroType}
where id = #{cus.id}
</foreach>
</update>
如果使用的是com.alibaba.druid.pool.DruidDataSource线程池,会报出
sql injection violation, multi-statement not allow : update错误,错误原因有两个,
第一:
没有在jdbc的连接中加入allowMultiQueries=true,加入就可以了,例如:
jdbc.url=jdbc:mysql://XXXXXXX:XXXX/assdb?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8
第二:需要在spring配置文件中加入
一定要注意:的value中不能出现防御sql注入的filter:wall,如果那么还是会引起系统报错
更多DruidDataSource参见DRUID连接池的实用 配置详解
https://www.cnblogs.com/wuyun-blog/p/5679073.html
批量更改参见:
https://blog.csdn.net/xu1916659422/article/details/77971696/