mybatis之mysql中的xml文件理论上不支持批量更新

mybatis之mysql中的xml文件理论上不支持批量更新

通过源码截图看出。

com.alibaba.druid.wall.WallProvider#checkInternal方法中的如下代码。

if (statementList.size() > 1 && !config.isMultiStatementAllow()) {
    violations.add(new IllegalSQLObjectViolation(ErrorCode.MULTI_STATEMENT, "multi-statement not allow", sql));
}

2.作为码农还是要想办法。

网上找了两篇帖子。。

第一篇帖子-------------------------------start--------------------------------------------------

multi-statement not allow 没有设置批处理,解决方案网上很多,大部分基于以下 (本人基于springBoot开发)

(1)设置WallConfig里面的multiStatementAllow 为true

(2)DB URL追加&allowMultiQueries=true 

以上详细内网,网上大把不做赘述。但是对于本人没用。

druid 的配置是基于Filter的,在设置wallConfig的时候事先查看wallConfig在druidDataSource 里面的Filtter是否存在,如果已经存在那么MySqlWallProvider 这个类在初始化的时候就会有可能初始化成另外一个没有配置multiStatementAllow 为true 的Filter,然后放在缓存里面,后面就算你的wallConfig 再次被执行init函数也不再放到缓存里面去.

下面是我在初始化wallConfig的时候打的断点,明显实现就已经存在了WallConfig,如果盲目的在设置一个WallConfig都是白搭,这就是我为什么采用了网上配置之后都是没用的原因


下面这个是取druidDataSource的内容进行初始化

解决方法:在设置之前先判断是都已经存在WallConfig,如果有,直接将现有的替换掉

DB的URL的参数还是得加上&allowMultiQueries=true , 原因网上很多,自行百度,欢迎提问
————————————————

 

第二篇帖子-------------------------------start--------------------------------------------------

有两个原因,一个数据库层面的限制,通过在url地址中添加allowMultiQueries=true可以解决

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test_account?characterEncoding=utf-8&useSSL=false&allowMultiQueries=true

另外一个原因,与D

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值