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

 

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