mybatis+mysql如何批量执行多条语句

在mysql中同时执行多条语句时,mysql是一条一条执行的。如果我一次性向mysql发送多条语句,它应该也会这么执行的。

 UPDATE newly_data SET city_name = ? , this_post = ? , id = ? , 
city_id = ? where 1=1 AND id = ? ; 
UPDATE newly_data SET city_name = ? , this_post = ? , id = ? , 
city_id = ? where 1=1 AND id = ? ; 
2020-05-26 10:25:02.233 DEBUG 13368 --- [p-nio-80-exec-1] c.w.p.m.NewMapper.updateListByField      :
 ==> Parameters: 
秦皇岛市(String), null, 1(Integer), 13(Integer), 1(Integer), 
秦皇岛市(String), null, 3(Integer), null, 3(Integer)
2020-05-26 10:25:02.236 DEBUG 13368 --- [p-nio-80-exec-1] 

我承认一开始想的太简单了,直接这样做的结果,是会在jdbc驱动层面报出语法错误异常,程序无法执行下去。

 

debug后发现,从mybatis拼装sql,到语句传入jdbc驱动,语句都是正常的,但是在mysql驱动验证sql合法性时,sql被截断,它认为一次性发过去的多条sql是不合法的。

 

看了网上很多说法,一说是mybatis本身不支持;一说是mysql驱动不支持。 

 
 

 

但今天,有高人,跟我说,这样做不行,是因为你没有让mysql驱动开启批量执行sql的开关。

 

怎么开启呢?在拼装mysql链接的url时,为其加上allowMultiQueries参数,设置为true,如下:

 

jdbc.jdbcUrl=jdbc:mysql://127.0.0.1:3306/database?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true

 UPDATE newly_data SET city_name = ? , this_post = ? , id = ? ,
 city_id = ? where 1=1 AND id = ? ; 
UPDATE newly_data SET city_name = ? , this_post = ? , id = ? , 
city_id = ? where 1=1 AND id = ? ; 
2020-05-26 10:25:02.233 DEBUG 13368 --- [p-nio-80-exec-1] c.w.p.m.NewMapper.updateListByField      : 
==> Parameters: 
秦皇岛市(String), null, 1(Integer), 13(Integer), 1(Integer), 
秦皇岛市(String), null, 3(Integer), null, 3(Integer)
2020-05-26 10:25:02.236 DEBUG 13368 --- [p-nio-80-exec-1] c.w.p.m.NewMapper.updateListByField      : <==  
  Updates: 1

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章