天天看点

MySql+Mybatis+Druid:sql injection violation, multi-statement not allow解决

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/