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

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

MyBatis一次執(zhí)行多條SQL語(yǔ)句的操作

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

有個(gè)常見的場(chǎng)景:刪除用戶的時(shí)候需要先刪除用戶的外鍵關(guān)聯(lián)數(shù)據(jù),否則會(huì)觸發(fā)規(guī)則報(bào)錯(cuò)。

解決辦法不外乎有三個(gè)

1、多條sql分批執(zhí)行;

2、存儲(chǔ)過程或函數(shù)調(diào)用;

3、sql批量執(zhí)行。

今天我要說的是MyBatis中如何一次執(zhí)行多條語(yǔ)句(使用mysql數(shù)據(jù)庫(kù))。

1、修改數(shù)據(jù)庫(kù)連接參數(shù)加上allowMultiQueries=true,如:

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

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

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

僅此而已~

補(bǔ)充知識(shí):【MyBatis】動(dòng)態(tài)SQL——foreach使用 /批量更新或批量插入

1.foreach的主要用在構(gòu)建in條件中,它可以在SQL語(yǔ)句中進(jìn)行迭代一個(gè)集合

2.可以傳遞一個(gè) List 實(shí)例或者數(shù)組作為參數(shù)對(duì)象傳給 MyBatis。當(dāng)你這么做的時(shí)候,MyBatis 會(huì)自動(dòng)將它包裝在一個(gè) Map 中,用名稱作為鍵。List 實(shí)例將會(huì)以“l(fā)ist”作為鍵,而數(shù)組實(shí)例將會(huì)以“array”作為鍵

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

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

item:集合中每一個(gè)元素進(jìn)行迭代時(shí)的別名

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

collection:若傳遞的是集合,則為list;若傳遞的是數(shù)組,則為array;若傳入的參數(shù)是多個(gè)的時(shí)候,我們就需要把它們封裝成一個(gè)Map或者Object,則為傳入?yún)?shù)map的key即就是參數(shù)名

open:該語(yǔ)句以什么開始

close:以什么結(jié)束

separator:在每次進(jìn)行迭代之間以什么符號(hào)作為分隔符

以下是批量更新

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

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

二:傳遞單個(gè)數(shù)組(數(shù)組中是pojo)

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

三:傳遞多個(gè)參數(shù)

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

三者唯一區(qū)別就是collection值不同

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

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

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

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

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

第一次嘗試:

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

解析的sql為:

INSERT t_usr (name ) VALUES ( ? , ? )

報(bào)如下錯(cuò)誤:

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一次執(zhí)行多條SQL語(yǔ)句的操作就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。

相關(guān)文章:
主站蜘蛛池模板: 99精品高清视频一区二区 | 国产成人三级 | 亚洲 欧美 日韩中文字幕一区二区 | 精品午夜国产在线观看不卡 | 国产精品日本欧美一区二区 | 日韩国产在线 | 在线播放成人高清免费视频 | 亚洲成年男人的天堂网 | 免费a级毛片大学生免费观看 | 欧美亚洲国产成人高清在线 | 久久精品免观看国产成人 | 午夜美女久久久久爽久久 | 男人女人真曰批视频播放 | 九九九国产 | 亚洲国产精品免费观看 | 欧美成人三级伦在线观看 | 亚洲一区二区影视 | 视频久久精品 | 欧美日韩亚洲一区二区三区在线观看 | 亚洲国产精品a在线 | 免费又黄又爽的视频 | 国产亚洲精品一区二区在线观看 | 国产成人精品一区二三区2022 | 欧美野外性k8播放性迷宫 | 国产大臿蕉香蕉大视频 | 手机毛片 | 国产一级特黄a大片99 | 国产免费高清在线精品一区 | 日韩永久在线观看免费视频 | 男女视频在线观看免费高清观看 | 欧美日韩一区二区在线视频 | 最新日韩欧美不卡一二三区 | 亚洲天堂视频网站 | 日韩性视频网站 | 农村寡妇女人一级毛片 | 亚洲欧美一区二区三区久久 | 日本高清毛片视频在线看 | 国产一区二区在线不卡 | 黄色毛片免费 | 一级作爱视频免费观看 | 自拍视频在线观看 |