欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

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

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

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

今天我要說(shuō)的是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 id="deleteUserById" 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è)名字,用于表示在迭代過(guò)程中,每次迭代到的位置

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_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í)提前把要跟新的值查出來(lái)放到集合或數(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_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語(yǔ)句的操作就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java效率工具之Lombok的具體使用

    Java效率工具之Lombok的具體使用

    這篇文章主要介紹了Java效率工具之Lombok的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Java比較兩個(gè)對(duì)象大小的三種方法詳解

    Java比較兩個(gè)對(duì)象大小的三種方法詳解

    在優(yōu)先級(jí)隊(duì)列中插入的元素必須能比較大小,如果不能比較大小,如插入兩個(gè)學(xué)生類型的元素,會(huì)報(bào)ClassCastException異常。本文就為大家總結(jié)了Java比較兩個(gè)對(duì)象大小的三種方法,需要的可以參考一下
    2022-07-07
  • spring 聲明式事務(wù)實(shí)現(xiàn)過(guò)程解析

    spring 聲明式事務(wù)實(shí)現(xiàn)過(guò)程解析

    這篇文章主要介紹了spring 聲明式事務(wù)實(shí)現(xiàn)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • Java編程中的條件判斷之if語(yǔ)句的用法詳解

    Java編程中的條件判斷之if語(yǔ)句的用法詳解

    這篇文章主要介紹了Java編程中的條件判斷之if語(yǔ)句的用法詳解,是Java入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-11-11
  • Java8?lambda表達(dá)式的10個(gè)實(shí)例講解

    Java8?lambda表達(dá)式的10個(gè)實(shí)例講解

    這篇文章主要介紹了Java8?lambda表達(dá)式的10個(gè)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Springboot PostMapping無(wú)法獲取數(shù)據(jù)問(wèn)題及解決

    Springboot PostMapping無(wú)法獲取數(shù)據(jù)問(wèn)題及解決

    這篇文章主要介紹了Springboot PostMapping無(wú)法獲取數(shù)據(jù)問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Java 如何獲取url地址文件流

    Java 如何獲取url地址文件流

    這篇文章主要介紹了Java 如何獲取url地址文件流,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • Spring入門實(shí)戰(zhàn)之Profile詳解

    Spring入門實(shí)戰(zhàn)之Profile詳解

    什么是spring profile?簡(jiǎn)單講profile就是一組配置,不同profile提供不同組合的配置,程序運(yùn)行時(shí)可以選擇使用哪些profile來(lái)適應(yīng)環(huán)境。下面這篇文章主要介紹了Spring中Profile實(shí)戰(zhàn)的相關(guān)資料,需要的朋友可以參考借鑒。
    2017-02-02
  • 解決Maven項(xiàng)目pom.xml導(dǎo)入了Junit包還是用不了@Test注解問(wèn)題

    解決Maven項(xiàng)目pom.xml導(dǎo)入了Junit包還是用不了@Test注解問(wèn)題

    在Maven項(xiàng)目中,如果在非test目錄下使用@Test注解,可能會(huì)因?yàn)閜om.xml中<scope>test</scope>的設(shè)置而無(wú)法使用,正確做法是將測(cè)試代碼放在src/test/java目錄下,或去除<scope>test</scope>限制,這樣可以確保Junit依賴正確加載并應(yīng)用于適當(dāng)?shù)拇a部分
    2024-10-10
  • Java開發(fā)之Lombok指南

    Java開發(fā)之Lombok指南

    Lombok是一款Java開發(fā)插件,使得Java開發(fā)者可以通過(guò)其定義的一些注解來(lái)消除業(yè)務(wù)工程中冗長(zhǎng)和繁瑣的代碼,它能夠在編譯源代碼期間自動(dòng)幫我們生成這些方法,并沒(méi)有如反射那樣降低程序的性能。下面我們來(lái)詳細(xì)了解一下吧
    2019-06-06

最新評(píng)論