最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2020年12月02日 11:52:15   作者:流水殤  
這篇文章主要介紹了MyBatis一次執(zhí)行多條SQL語句的操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧

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

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

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

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

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

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

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

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

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

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

僅此而已~

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

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

2.可以傳遞一個(gè) List 實(shí)例或者數(shù)組作為參數(shù)對象傳給 MyBatis。當(dāng)你這么做的時(shí)候,MyBatis 會自動將它包裝在一個(gè) Map 中,用名稱作為鍵。List 實(shí)例將會以“l(fā)ist”作為鍵,而數(shù)組實(shí)例將會以“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:該語句以什么開始

close:以什么結(jié)束

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

以下是批量更新

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

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

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

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

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

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

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

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

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_user
WHERE
 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語句的操作就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Netty進(jìn)階之EventExecutorGroup源碼詳解

    Netty進(jìn)階之EventExecutorGroup源碼詳解

    這篇文章主要介紹了Netty進(jìn)階之EventExecutorGroup源碼詳解,EventExecutorGroup繼承了JDK的ScheduledExecutroService,那么它就擁有了執(zhí)行定時(shí)任務(wù),執(zhí)行提交的普通任務(wù),需要的朋友可以參考下
    2023-11-11
  • 完美解決因數(shù)據(jù)庫一次查詢數(shù)據(jù)量過大導(dǎo)致的內(nèi)存溢出問題

    完美解決因數(shù)據(jù)庫一次查詢數(shù)據(jù)量過大導(dǎo)致的內(nèi)存溢出問題

    今天小編就為大家分享一篇完美解決因數(shù)據(jù)庫一次查詢數(shù)據(jù)量過大導(dǎo)致的內(nèi)存溢出問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • 詳解Java之冒泡排序與選擇排序

    詳解Java之冒泡排序與選擇排序

    這篇文章主要為大家介紹了Java之冒泡排序與選擇排序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • 解決java連接zookeeper很慢的問題

    解決java連接zookeeper很慢的問題

    這篇文章主要介紹了解決java連接zookeeper很慢的問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java多線程之CAS機(jī)制詳解

    Java多線程之CAS機(jī)制詳解

    這篇文章主要介紹了Java多線程之CAS機(jī)制詳解,CAS指的是Compare-And-Swap(比較與交換),它是一種多線程同步的技術(shù),常用于實(shí)現(xiàn)無鎖算法,從而提高多線程程序的性能和擴(kuò)展性,需要的朋友可以參考下
    2023-07-07
  • 關(guān)于java中Map的九大問題分析

    關(guān)于java中Map的九大問題分析

    這篇文章主要為大家詳細(xì)分析了關(guān)于java中Map的九大問題,感興趣的小伙伴們可以參考一下
    2016-08-08
  • Java編程接口詳細(xì)

    Java編程接口詳細(xì)

    這篇文章主要小編主要給大家講解的是Java編程中的接口,文章會從抽象類和抽象方法開始展開內(nèi)容,感興趣的小伙伴可以參考下面文章的具體內(nèi)容
    2021-10-10
  • 導(dǎo)出maven項(xiàng)目依賴的jar包(圖文教程)

    導(dǎo)出maven項(xiàng)目依賴的jar包(圖文教程)

    下面小編就為大家?guī)硪黄獙?dǎo)出maven項(xiàng)目依賴的jar包(圖文教程)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-10-10
  • Mysql在Spring Boot項(xiàng)目中的完整配置教程

    Mysql在Spring Boot項(xiàng)目中的完整配置教程

    本文詳細(xì)介紹了在Spring Boot項(xiàng)目中配置Mysql數(shù)據(jù)庫的各個(gè)方面,包括基礎(chǔ)配置、高級配置、JPA/Hibernate配置、事務(wù)管理、性能優(yōu)化、安全配置以及故障排除,同時(shí),提供了常用配置參數(shù)的說明和連接池的選擇建議,感興趣的朋友跟隨小編一起看看吧
    2026-02-02
  • Dubbo Service Mesh基礎(chǔ)架構(gòu)組件改造

    Dubbo Service Mesh基礎(chǔ)架構(gòu)組件改造

    Service Mesh這個(gè)“熱”詞是2016年9月被“造”出來,而今年2018年更是被稱為service Mesh的關(guān)鍵之年,各家大公司都希望能在這個(gè)思潮下領(lǐng)先一步
    2023-03-03

最新評論

宣汉县| 绥江县| 榆林市| 沈阳市| 安仁县| 万州区| 海口市| 孝感市| 胶南市| 沁阳市| 南京市| 铁岭县| 湟中县| 保德县| 和田市| 宜良县| 长葛市| 土默特左旗| 瑞昌市| 莆田市| 出国| 得荣县| 邹平县| 颍上县| 南安市| 扬州市| 门源| 隆回县| 兴和县| 曲靖市| 丹东市| 从化市| 扬州市| 巴楚县| 西乌珠穆沁旗| 夏津县| 芒康县| 崇阳县| 汾阳市| 罗定市| 云林县|