Oracle通過MyBatis執行批量插入與更新問題

最近看一個老項目,使用的Oracle數據庫,發現要使用MyBatis執行批量操作還是不太一樣。

下面我們來看一下,Oracle數據庫,如何使用MyBatis來批量插入和更新。

批量插入

因為Oracle和MySQL的insert還不太一樣,Oracle不能像MySQL直接語法插入多條:

INSERT INTO table_name(column1, column2, column3)
VALUES
(value1, value2, value3),
(value4, value5, value6),
(value7, value8, value9);

所以需要使用insert all來變通一下:

insert allinto table_name values(1,'張三',49)into table_name values(2,'李四',39)into table_name values(3,'王五',29)into table_name values(4,'趙六',19)into table_name values(5,'孫七',59)
select 1 from dual;

上面的table_name可以是不同的表。

簡單來說就是把插入語句放在insert all和select 1 from dual;之間

注意中間的插入語句沒有insert

在MyBatis中我們使用foreach拼裝一下,open就是insert all,中間是into 插入語句,close是select 1 from dual

注意最后沒有分號,除非你url中設置了allowMultiQueries=true才可以帶分號結尾,否則MyBatis執行會出錯。

下面是具體的示例:

<insert id="insertSelectiveList" parameterType="vip.meet.BusinessDateType"><foreach collection="list" item="item" index="index" separator="" open="insert all" close="select 1 from dual">into business_date_type<trim prefix="(" suffix=")" suffixOverrides=","><if test="item.pkId != null">PK_ID,</if><if test="item.fid != null">FID,</if><if test="item.rowIndex != null">ROW_INDEX,</if><if test="item.dataType != null">DATA_TYPE,</if><if test="item.lastModifyTime != null">LAST_MODIFY_TIME,</if></trim><trim prefix="values (" suffix=")" suffixOverrides=","><if test="item.pkId != null">#{item.pkId,jdbcType=NUMERIC},</if><if test="item.fid != null">#{item.fid,jdbcType=NUMERIC},</if><if test="item.rowIndex != null">#{item.rowIndex,jdbcType=NUMERIC},</if><if test="item.dataType != null">#{item.dataType,jdbcType=NUMERIC},</if><if test="item.lastModifyTime != null">#{item.lastModifyTime},</if></trim></foreach>
</insert>

批量更新

Oracle沒有批量更新的語句,怎么批量更新呢?

可以使用begin,end語句塊,可以把update語句放在begin和end之間執行。

BEGINUPDATE business_date_type SET price = 2.99 WHERE FID = 27210303266880UPDATE business_date_type SET price = 4197276.99 WHERE FID = 27210303266880;
END;

在MyBatis中我們使用foreach拼裝一下,open就是begin,中間是update語句,close是;end;

close為啥是;end;呢,因為foreach的separator最后一個語句不會添加,所以少一個,需要補一個。
end后面的分號(;)是因為begin end;語法,這個分號不能省略,必須添加。

為什么有的不能有分號,有分號出錯,begin end又必須有分號,沒有分號出錯呢?

我想大概是因為,其他都是一個完整語句,begin end是一個語句塊,可能有多條語句,必須通過分號(;)來判斷結束吧。

<update id="updateList" parameterType="java.util.List"><foreach collection="list" item="item" index="index" open="begin" close=";end;" separator=";">update business_date_type<set><if test="item.dataType != null">DATA_TYPE = #{item.dataType,jdbcType=VARCHAR},</if><if test="item.lastModifyTime != null">LAST_MODIFY_TIME = #{item.lastModifyTime},</if></set>where FID = #{item.fid,jdbcType=NUMERIC}</foreach>
</update>

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

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

相關文章

canal本地安裝和使用

1、組件版本 canal.deployer-1.1.7 kafka_2.13-2.6.0 jdk8 apache-zookeeper-3.6.0-bin mysql5.7 2、解壓canal.deployer-1.1.7 2.1、修改canal.properties配置文件 ##改為kafka canal.serverModekafka## 改為instance canal.destinations instance## 改為true&#x…

STM32——獨立看門狗

文章目錄 一、看門狗基礎介紹&#xff08;一&#xff09;看門狗概述&#xff1a;&#xff08;二&#xff09;看門狗的作用&#xff1a;&#xff08;三&#xff09;看門狗的原理&#xff1a;&#xff08;四&#xff09;為什么需要使用看門狗來提高系統的可靠性&#xff1a;&…

Linux 中的 rm 命令及示例

Linux 中的 rm 命令及示例 rm命令是Linux中最常見、最基礎的命令之一。即使您對 Linux 的使用經驗有限&#xff0c;您也很可能聽說過它。該命令的主要目的是刪除文件和目錄。使用此命令刪除文件和目錄無法撤消。 這意味著您應該謹慎使用此命令&#xff0c;因為如果沒有備份&am…

振南技術干貨集:制冷設備大型IoT監測項目研發紀實(5)

注解目錄 1.制冷設備的監測迫在眉睫 1.1 冷食的利潤貢獻 1.2 冷設監測系統的困難 &#xff08;制冷設備對于便利店為何如何重要&#xff1f;了解一下你所不知道的便利店和新零售行業。關 于電力線載波通信的論戰。&#xff09; 2、電路設計 2.1 防護電路 2.1.1 強電防護…

Colmap三維重建詳解與使用方法

圖片捕獲過程&#xff0c;請遵循以下指導方針以獲得最佳重建結果: 1 捕捉具有良好紋理的圖像。避免使用完全沒有質感的圖片(例如&#xff0c;白色的墻或空桌子)。如果場景本身沒有足夠的紋理&#xff0c;你可以放置額外的背景對象&#xff0c;如海報等。 2 在相似的照明條件下…

@Value和@Scheduled注解簡介

&#xff08;1&#xff09;SpringBoot讀取配置文件&#xff0c;使用Value注解獲取數據&#xff0c;中文亂碼問題解決辦法 new String(xxx.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8) &#xff08;2&#xff09;Scheduled注解 例如&#xff0c;Scheduled(…

前端處理返回數據為數組對象且對象嵌套數組并重名的數據,合并名稱并疊加數據

前端處理返回數據為數組對象且對象嵌套數組并重名的數據&#xff0c;合并名稱并疊加數據 var newList[]; var table{}; var dataObj{}; var finalList[]; var tableData[{brName:營業部,dateStr:2023-11-23,tacheArr:[{dealCnt:20,tacheName:奔馳}]},{brName:營業部,dateStr:2…

TypeError: Cannot read property ‘sendpost‘ of undefined

箭頭函數指向問題&#xff0c;定義let that this 解決

大寬帶服務器有什么優勢?

大寬帶服務器有什么優勢&#xff1f; 什么是大帶寬服務器&#xff1f;從屬性上看&#xff0c;大寬帶可以分為G口大帶寬、萬兆大帶寬等&#xff0c;從線路上看&#xff0c;可以分為電信、移動、聯通等&#xff0c;從地域屬性看&#xff0c;可以分為國內寬帶、國際寬帶。大寬帶是…

如何活躍谷歌開發者賬號,增加賬號的權重和真實性,從而延長應用在線時長?

眾所周知&#xff0c;每個谷歌開發者賬號都有一個初始權重&#xff0c;而權重的高低會影響到賬號的穩定性和真實性&#xff0c;從而影響應用上架的成功率和應用在線時長。 關于提高谷歌賬號權重、活躍度及穩定性&#xff0c;以下的方法和建議可供參考&#xff1a; 1、社區活動…

外設——CAN總線收發器TJA1043

目錄 1. 引腳 2. 工作模式 3. 5種模式和7種狀態標識的理解和使用 1. 引腳 2. 工作模式 該收發器相較于普通收發器&#xff0c;引腳多了幾個&#xff0c;就是功能等多了。TJA1043支持五種操作模式&#xff0c;就是通過控制引腳STB_N和EN來原則。五種模式&#xff1a; 正常模式…

OpenCV滑塊驗證碼圖像缺口位置識別

OpenCV圖像缺口位置識別 1、背景2、圖像缺口位置識別原理3、圖像缺口位置識別實現4、滑塊驗證碼HTTP圖像需要保存到本地嗎1、背景 在使用Selenium完成自動化爬蟲時,許多網站為了防止機器人爬取數據會使用驗證碼(例如滑塊驗證碼)。通過Selenium動作操作,爬蟲可以模擬用戶輸入…

前端工程、靜態代碼、Html頁面 打包成nginx 的 docker鏡像

1. 創建一個 mynginx的目錄 2. 將前端代碼文件夾&#xff08;比如叫 front &#xff09;復制到 mynginx 目錄下 3. 在mynginx 目錄下創建一個名為Dockerfile 的文件&#xff08;文件名不要改&#xff09;&#xff0c;文件內容如下&#xff1a; # 使用官方的 Nginx 鏡像作為基…

神經網絡訓練技巧

1. 逐漸增加訓練數據規模&#xff0c;比如先在小數據集上訓練&#xff0c;之后再增大數據集繼續訓練。

網站權重是什么意思

網站權重是指搜索引擎對網站的評估指標&#xff0c;用以衡量網站的重要性 搜索引擎會根據網站權重來決定網站在搜索結果中的排名和位置&#xff0c;從而決定其在搜索中的可見度 網站權重是多方面因素的綜合評估&#xff0c;其中主要包括網站內容質量、外部鏈接量及質量、網站…

JS逆向之wasm逆向(二)

本文僅供技術交流和技術學習 不做其他用途 接著上一篇繼續講&#xff1a; 上篇地址&#xff1a; JS逆向之wasm逆向(二進制) 網址&#xff1a; aHR0cHM6Ly93d3cuN3E2Y3lqLmNvbTo5MDAxL3JlZ2lzdGVyNDY5Njg/aV9jb2RlPTQ0Mjc5OTU1 這個網站我們后面可以繼續講他的debugger 和滑塊…

[點云分割] Clustering of Pointclouds into Supervoxels

介紹 “Clustering of Pointclouds into Supervoxels” 是一種點云數據聚類的方法&#xff0c;用于將點云數據分割成具有相似特征的超體素&#xff08;supervoxel&#xff09;。 超體素是一種在點云數據中表示連續區域的方法&#xff0c;類似于像素在圖像中表示連續區域。超體…

C 語言 http通信

1&#xff0c;C語言本身不包含直接支持HTTP協議的功能&#xff0c;但你可以使用第三方庫來實現HTTP客戶端或服務器。 以下是一些常用的C語言HTTP庫&#xff1a; libcurl&#xff1a;一個支持多種協議的開源庫&#xff0c;包括HTTP、HTTPS、FTP等。它提供了一組簡單的API&…

因果發現31種高效經典方案匯總,附配套算法和代碼

因果發現&#xff08;Causal Discovery&#xff09;是一個復雜的過程&#xff0c;其目標是從大量的數據中確定變量之間的因果關系。這個過程通常涉及到的是如何從紛繁復雜的數據中發現其中隱含的因果關系。有時&#xff0c;研究者可以通過隨機實驗進行干預來發現因果關系&#…

解決PDF預覽時,電子簽章、日期等不顯示問題

文章目錄 問題描述問題排查問題解決 問題描述 在預覽PDF時&#xff0c;部分簽章或控件沒有顯示。如下圖&#xff1a; 正確應該要這樣&#xff1a; 問題排查 根據網上搜索&#xff0c;排查&#xff0c;我先看看&#xff0c;pdf.worker.js 里的這三行代碼&#xff0c;是否已經注…