色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術文章
文章詳情頁

MyBatis一次執行多條SQL語句的操作

瀏覽:7日期:2023-10-20 17:57:42

有個常見的場景:刪除用戶的時候需要先刪除用戶的外鍵關聯數據,否則會觸發規則報錯。

解決辦法不外乎有三個

1、多條sql分批執行;

2、存儲過程或函數調用;

3、sql批量執行。

今天我要說的是MyBatis中如何一次執行多條語句(使用mysql數據庫)。

1、修改數據庫連接參數加上allowMultiQueries=true,如:

hikariConfig.security.jdbcUrl=jdbc:mysql://xx.xx.xx:3306/xxxxx?characterEncoding=utf-8&autoReconnect=true&failOverReadOnly=false&allowMultiQueries=true

2、直接寫多條語句,用“;”隔開即可

<delete parameterType='String'> delete from sec_user_role where userId=#{id}; delete from sec_user where id=#{id};</delete>

僅此而已~

補充知識:【MyBatis】動態SQL——foreach使用 /批量更新或批量插入

1.foreach的主要用在構建in條件中,它可以在SQL語句中進行迭代一個集合

2.可以傳遞一個 List 實例或者數組作為參數對象傳給 MyBatis。當你這么做的時候,MyBatis 會自動將它包裝在一個 Map 中,用名稱作為鍵。List 實例將會以“list”作為鍵,而數組實例將會以“array”作為鍵

3.foreach的collection能夠支持的三種集合類型list,array以及map

4.foreach元素的屬性主要有 item,index,collection,open,separator,close。

item:集合中每一個元素進行迭代時的別名

index:指定一個名字,用于表示在迭代過程中,每次迭代到的位置

collection:若傳遞的是集合,則為list;若傳遞的是數組,則為array;若傳入的參數是多個的時候,我們就需要把它們封裝成一個Map或者Object,則為傳入參數map的key即就是參數名

open:該語句以什么開始

close:以什么結束

separator:在每次進行迭代之間以什么符號作為分隔符

以下是批量更新

一:傳遞單個集合(鍵值是pojo)

UPDATE t_userSET solary=2000WHERE id IN <foreach item='item' index='index' collection='list' separator=',' open='(' close=')'> #{item.id} </foreach>

二:傳遞單個數組(數組中是pojo)

UPDATE t_userSET solary=2000WHERE id IN <foreach item='item' index='index' collection='array' separator=',' open='(' close=')'> #{item.id} </foreach>

三:傳遞多個參數

UPDATE t_userSET solary=2000WHERE id IN <foreach item='item' index='index' collection='ids' separator=',' open='(' close=')'> #{item.id} </foreach>

三者唯一區別就是collection值不同

以上時提前把要跟新的值查出來放到集合或數組中,但可不可以IN中放查詢語句那,如:

UPDATE t_user SET solary = 2000 WHERE id IN ( SELECT id FROM t_user WHERE end_time < NOW( ) )

但是這樣是不行的,mysql不允許這樣寫(我猜可能是查的同時不同更改,就如list集合在做查詢錯做時是不能刪除的),但是可以在查詢時查詢,如:

SELECT * FROM t_userWHERE id IN ( SELECT id FROM t_user WHERE end_time < NOW( ) )

以下是批量插入(插入兩條數據記錄)

第一次嘗試:

INSERT t_usr ( NAME )VALUES < foreach collection = 'list' item = 'user' OPEN = '(' CLOSE = ')' SEPARATOR = ',' > #{user.name} </ foreach>

解析的sql為:

INSERT t_usr (name ) VALUES ( ? , ? )

報如下錯誤:

Cause: java.sql.SQLException: Column count doesn’t match value count at row 1

第二次嘗試:

INSERT t_usr (NAME )VALUES < foreach collection = 'list' item = 'user' OPEN = '' CLOSE = '' SEPARATOR = ',' > (#{user.name}) </ foreach>

解析的sql為: INSERT t_usr (id,name ) VALUES (?) , (?)

正確插入

以上這篇MyBatis一次執行多條SQL語句的操作就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Mybatis 數據庫
相關文章:
主站蜘蛛池模板: 国产网站在线 | 一个人免费观看日本www视频 | 国产三级日产三级日本三级 | 精品视频在线观看 | 99精品国产在现线免费 | 国美女福利视频午夜精品 | 美女张开腿让人捅 | 亚洲精品99久久久久中文字幕 | 欧美做暖小视频xo免费 | 波多野结衣中文一区二区免费 | 午夜伦y4480影院中文字幕 | 一区欧美 | 午夜dj视频完整社区 | 免费观看欧美成人禁片 | 欧美的高清视频在线观看 | 亚洲欧美一区二区三区在线播放 | 日本波多野结衣在线 | 操操操网| 欧美成人亚洲综合精品欧美激情 | 97视频免费播放观看在线视频 | 国产精品麻豆一区二区三区v视界 | 99视频精品全部在线播放 | 香蕉久久国产 | 美女张开腿让男人捅爽 | 国产免费一级在线观看 | 国产精品99久久久久久www | 国产丝袜美女一区二区三区 | 欧洲美女a视频一级毛片 | 91精品国产免费 | 欧美a在线视频 | 国产爽爽视频 | 91欧洲在线视精品在亚洲 | 亚洲三级黄色片 | 亚洲精品综合一区二区三区在线 | 美女大片高清特黄a大片 | 欧美在线一级毛片视频 | 黄色三级网 | 玖草| 永久精品免费影院在线观看网站 | 91亚洲精品一区二区福利 | 欧美一级艳片视频免费观看 |