【mybatis】mapper.xml中foreach的用法,含批量查詢、插入、修改、刪除方法的使用

一、xml文件中foreach的主要屬性
foreach元素的屬性主要有 collection,item,index,separator,open,close。
collection: 表示集合,數據源
item :表示集合中的每一個元素
index :用于表示在迭代過程中,每次迭代到的位置
separator :表示在迭代時數據以什么符號作為分隔符
open :表示該語句以什么開始
close :表示以什么結束

二、foreach批量查詢數據
1、當查詢的參數只有一個時

例如:findByIds(List ids)
a.如果參數類型為List,在使用時,collection的屬性需指定為list
b.如果參數類型為數組,則在使用時,collection屬性需指定為array

<select id="findByIdsMap" resultMap="BaseResultMap">
? ? ? ? ?Select ?sum(mark)
? ? ? ? ?from table_user where user_id in
? ? ? ? ? ? ? ? ? <foreach item="item" index="index" collection="list"?
? ? ? ? ? ? ? ? ? ? ? ? ?open="(" separator="," close=")">
? ? ? ? ? ? ? ? ? ? ? ? #{item}
? ? ? ? ? ? ? ? </foreach>
? </select>?

2、當查詢的參數是一個對象時

例如:findByIds(List userList)

<select id="findByIdsMap" resultMap="BaseResultMap">
? ? ? ? ?Select sum(mark)
? ? ? ? ?from table_user where user_id in
? ? ? ? ? ? ? ? ? <foreach item="item" index="index" collection="list"?
? ? ? ? ? ? ? ? ? ? ? ? ?open="(" separator="," close=")">
? ? ? ? ? ? ? ? ? ? ? ? #{item.userId}
? ? ? ? ? ? ? ? </foreach>
? </select>?

三、foreach批量插入數據
實現foreach批量插入數據有兩種方法,一種是只發送一條 SQL,插入的多條數據之間通過”,” 分隔開,另一種方式是每插入一條數據就發送一條 SQL 語句,多個 SQL 語句之間用“;”分割。

1.一條 SQL 批量插入數據
對應的Mapper接口代碼如下:

/** 返回值為 Integer 類型 */
Integer addStudentByList(@Param("list") List<Student> list);
1
2
對應的SQL 映射文件如下:

<insert id="addStudentByList" parameterType="">
? ? INSERT INTO Student(username, age, password) VALUES?
? ? <foreach collection="list" item="item" separator=",">
? ? ? ? (#{ item.username}, #{ item.age}, #{ item.password})
? ? </foreach>
</insert>

2.執行多條 SQL 批量插入數據
對應的Mapper接口代碼和一條 SQL 批量插入數據相同
對應的SQL 映射文件在一條 SQL 批量插入數據的基礎上修改如下:

<insert id="addEmpsByList" parameterType="com.jas.mybatis.bean.Employee">
? ? <!-- 每插入一條數據就執行一次 SQL,中間用";"分隔開 ?-->
? ? <foreach collection="list" item="emp" separator=";">
? ? ? ? INSERT INTO Student(username, age, password) VALUES
? ? ? ? (#{ item.username}, #{ item.age}, #{ item.password})
? ? </foreach>
</insert>

三、foreach批量更新數據
實現foreach批量插入數據有兩種種方法,第一種是一條sql語句來批量更新數據,第二種是批量更新的sql。

一條 SQL 批量更新數據
一條sql語句來批量更新所有數據,下面直接看一下在mybatis中通常是怎么寫的(去掉mybatis語法就是原生的sql語句了,所有就沒單獨說sql是怎么寫的)
對應的SQL 映射文件如下:

<update id="updateBatch" parameterType="java.util.List">
? ? update Student set ?username=
? ? <foreach collection="list" item="item" index="index" separator=" " open="case ID" close="end">
? ? ? ? when #{ item.id} then #{ item.username}
? ? </foreach>
? ? where id in
? ? <foreach collection="list" index="index" item="item" separator="," open="(" close=")">
? ? ? ? #{ item.id,jdbcType=BIGINT}
? ? </foreach>
</update>
<------------------------------------分隔符-------------------------------->
?<update id="updateBatch" ?parameterType="java.util.List"> ?
? ? <foreach collection="list" item="item" index="index" open="" close="" separator=";">
? ? ? ? update Student
? ? ? ? <set>
? ? ? ? ? ? username=${ item.username}
? ? ? ? </set>
? ? ? ? where id = ${ item.id}
? ? </foreach> ? ? ?
</update>

四、foreach批量刪除數據
所對應的SQL映射文件如下:

<delete id="delAssetstype" parameterType="java.util.List">
? ? ? ?DELETE FROM WHERE id in
? ? ? ?<foreach collection="list" item="item" open="(" close=")" separator=",">
? ? ? ? ? ?#{ item}
? ? ? ?</foreach>
? ?</delete>

對應的Mapper接口代碼如下:

public void deleteAssetstype(List<Integer> ids);

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/42965.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/42965.shtml
英文地址,請注明出處:http://en.pswp.cn/news/42965.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

blender 發射體粒子

發射體粒子的基礎設置 選擇需要添加粒子的物體&#xff0c;點擊右側粒子屬性&#xff0c;在屬性面板中&#xff0c;點擊加號&#xff0c;物體表面會出現很多小點點&#xff0c;點擊空格鍵&#xff0c;粒子會自動運動&#xff0c;像下雨一樣&#xff1b; bender 粒子系統分為兩…

【100天精通python】Day40:GUI界面編程_PyQt 從入門到實戰(完)_網絡編程與打包發布

目錄 8 網絡編程 8.1 使用PyQt 網絡模塊進行網絡通信 服務器端示例 客戶端示例 8.2 處理網絡請求和響應 9 打包和發布 9.1 創建可執行文件或安裝程序 9.2 解決依賴問題 9.3 發布 PyQt 應用到不同平臺 9.3.1 發布到 Windows 9.3.2 發布到 macOS 9.3.3 發布到 Linux 9…

sap ui5刷新頁面的方式

1.第一種 window.location.reload();2.第二種 如果你想在UI5應用程序中使用MVC模式來處理頁面刷新,可以通過重新加載當前路由來實現刷新。首先,確保你有一個Router對象實例: var oRouter = sap.ui.core.UIComponent.getRouterFor(this);然后&

[保研/考研機試] KY43 全排列 北京大學復試上機題 C++實現

題目鏈接&#xff1a; 全排列https://www.nowcoder.com/share/jump/437195121692001512368 描述 給定一個由不同的小寫字母組成的字符串&#xff0c;輸出這個字符串的所有全排列。 我們假設對于小寫字母有a < b < ... < y < z&#xff0c;而且給定的字符串中的字…

Docker vs. Kubernetes:選擇合適的場景

在決定使用 Docker 還是 Kubernetes 之前&#xff0c;讓我們看看一些實際的場景&#xff0c;以便更好地理解它們的適用性。 使用 Docker 的場景 假設您正在開發一個微服務應用程序&#xff0c;其中每個微服務都需要一些特定的依賴項和環境。在這種情況下&#xff0c;Docker 是一…

HJ6 質數因子

描述 功能:輸入一個正整數&#xff0c;按照從小到大的順序輸出它的所有質因子&#xff08;重復的也要列舉&#xff09;&#xff08;如180的質因子為2 2 3 3 5 &#xff09; 數據范圍&#xff1a; 1≤n≤210914 1≤n≤210914 輸入描述&#xff1a; 輸入一個整數 輸出描述&…

學習Vue:聲明式路由和程序式路由

在Vue.js中&#xff0c;路由與導航是構建單頁應用程序&#xff08;SPA&#xff09;的關鍵概念。在使用Vue Router時&#xff0c;您可以使用兩種方式來進行路由與導航&#xff1a;聲明式路由和程序式導航。本文將詳細介紹這兩種方式&#xff0c;幫助您理解它們的用法和優勢。 聲…

Ceph入門到精通-Aws Iam(user,role,group,policy,resource)架構圖和快速入門

-- Aws Iam(identity,user,role,group,policy,resource,)架構圖和快速入門. 【官網】&#xff1a;Cloud Computing Services - Amazon Web Services (AWS) 應用場景 aws 云服務運維,devops過程中經常涉及各項服務&#xff0c;權限&#xff0c;角色的處理。 為了更好的使用各項…

Redis在Java中的基本使用

本片將介紹 Redis 在 Java 中的基本使用 文章目錄 1、使用jedis操作redis1.1、Jedis簡介1.2、引入jedis的Maven依賴1.2、獲取連接1.3、使用實例 2、對于JedisPooled的使用2.1、使用JedisPooled2.2、關于連接池 3、SpringBoot下使用Redis3.1、引入Maven依賴3.2、配置Redis連接3.…

mac m1上系統內錄內部聲音的方法/無需安裝Blackhole

總所周知&#xff0c;m1的mac不能錄制桌面音頻&#xff0c;obsstudio都不行。 最快的解決方法就是下載飛書&#xff1a; 登陸后新建直播/視頻會議&#xff1a; 共享的時候選擇下面的兩個鉤上去就好了

6.RocketMQ之索引文件ConsumeQueue

本文著重分析為consumequeue/topic/queueId目錄下的索引文件。 1.ConsumeQueueStore public class ConsumeQueueStore {protected final ConcurrentMap<String>, ConcurrentMap<Integer>, ConsumeQueueInterface>> consumeQueueTable;public boolean load(…

【BUG】docker安裝nacos,瀏覽器卻無法訪問到頁面

個人主頁&#xff1a;金鱗踏雨 個人簡介&#xff1a;大家好&#xff0c;我是金鱗&#xff0c;一個初出茅廬的Java小白 目前狀況&#xff1a;22屆普通本科畢業生&#xff0c;幾經波折了&#xff0c;現在任職于一家國內大型知名日化公司&#xff0c;從事Java開發工作 我的博客&am…

Socks5、IP代理在爬蟲開發與HTTP通信中的應用

隨著互聯網的不斷發展&#xff0c;代理服務器成為網絡工程師和數據爬蟲開發者的關鍵工具。本文將深入探討Socks5代理、IP代理以及它們在網絡安全、爬蟲開發和HTTP通信中的重要作用。 1. 代理服務器&#xff1a;保障隱私與安全的中間人 代理服務器是位于客戶端與目標服務器之間…

object獲取的兩種方式/Object.keys使用/解構賦值

object獲取的兩種方式&#xff1a; data() {return {abj: {aa: {A: 1}}}},created() {console.log(this.abj.aa) //第一種console.log(this.abj["aa"]) //第二種}, Object.keys使用/解構賦值&#xff1a; return {footList: [],abj: {aa: {A: 12,AA:22},bb: {…

軟件工程概述-架構師(三)

軟件工程概述&#xff08;老版&#xff09; 軟件開發生命周期&#xff1a; 軟件定義時期&#xff1a;包括 可行性研究和詳細需求分析過程&#xff0c;任務是軟件工程必需完成的目標&#xff0c;具有可行問題分析、可行性研究、需求分析等。軟件開發時期&#xff1a;軟件的 設…

20230818 數據庫自整理部分

并發事務 臟讀 一個事務讀取到另一事務還沒有提交的數據 事務B讀取了事務A還沒有提交的數據 不可重復讀 一個事務先后讀取同一條記錄&#xff0c;但是兩次讀取的數據不同&#xff0c;稱之為不可重復讀 查詢出來的數據不一樣 1步驟b還沒有提交 3步驟b已經提交 幻讀 一個…

SOLIDWORKS 2023中裝配體配合的正確使用方法 碩迪科技

-SOLIDWORKS 裝配體打開時是由不同的階段和性能檢查組成的。如果在創建裝配體時未應用基本的配合方法&#xff0c;問題會隨著時間的推移而累積&#xff0c;并且在使用時會出現明顯的速度減慢。 如果您的裝配體運行速度很慢&#xff0c;則很可能是在創建配合時出現了不良操作的癥…

C#如何遍歷類的屬性,并獲取描述/注釋

要獲取屬性的描述/注釋&#xff0c;需要使用System.ComponentModel命名空間中的DescriptionAttribute。可以通過反射獲取屬性上的DescriptionAttribute&#xff0c;并獲取其Description屬性值。 首先&#xff0c;需要引入System.ComponentModel命名空間&#xff1a; using Sy…

貝葉斯推理問題、MCMC和變分推理

一、說明 1.1 介紹 貝葉斯推理是統計學中的一個主要問題&#xff0c;在許多機器學習方法中也會遇到。例如&#xff0c;用于分類的高斯混合模型或用于主題建模的潛在狄利克雷分配都是在擬合數據時需要解決此類問題的圖形模型。 同時&#xff0c;可以注意到&#xff0c;貝葉斯推…

vscode ssh 遠程 gdb 調試

一、點運行與調試&#xff0c;生成launch.json 文件 二、點添加配置&#xff0c;選擇GDB 三、修改啟動程序路徑