MyBatis批量插入資料實現(MySQL)

2021-10-10 11:58:07 字數 1848 閱讀 1983

先複習一下單條/批量插入資料的sql語句怎麼寫:

單條插入資料的寫法:

insert into table ([列名],[列名])  values ([列值],[列值]));

或:insert into table values ([列值],[列值]));

批量插入

一種可以在**中迴圈著執行上面的語句,但是這種效率太差。

另一種,可以用mysql支援的批量插入語句,這種方式相比起來,更高效。

insert into table ([列名],[列名])

values

([列值],[列值])),

([列值],[列值])),

([列值],[列值]));

批量的好處:可以避免程式和資料庫建立多次連線,從而增加伺服器負荷。

mybatis批量插入資料到資料庫有兩種方式:xml檔案,註解。

使用批量插入執行的sql語句應該等價於:

insert into table (id, name,***,address)

values

(?,?,?,?),(?,?,?,?),(?,?,?,?),(?,?,?,?)

insert into person (id, name,***,address)

values

(#,#,

#,#)

insert into person ( ) 

values

(null,#,#,#)

引數解釋

foreach的主要作用在構建in條件中,它可以在sql語句中進行迭代乙個集合。foreach元素的屬性主要有 collection,item,separator,index,open,close。

collection:指定要遍歷的集合。表示傳入過來的引數的資料型別。該屬性是必須指定的,要做 foreach 的物件。在使用foreach的時候最關鍵的也是最容易出錯的就是collection屬性。在不同情況 下,該屬性的值是不一樣的,主要有一下3種情況:

a. 如果傳入的是單引數且引數型別是乙個list的時候,collection屬性值為list

b. 如果傳入的是單引數且引數型別是乙個array陣列的時候,collection的屬性值為array

c. 如果傳入的引數是多個的時候,我們就需要把它們封裝成乙個map了,當然單引數也可以封裝成map。map 物件沒有預設的鍵

item:表示集合中每乙個元素進行迭代時的別名。將當前遍歷出的元素賦值給指定的變數,然後用#,就能取出變數的值,也就是當前遍歷出的元素。

separator:表示在每次進行迭代之間以什麼符號作為分隔符。select * from tab where id in(1,2,3)相當於1,2,3之間的","

index:索引。index指定乙個名字,用於表示在迭代過程中,每次迭代到的位置。遍歷list的時候index就是索引,遍歷map的時候index表示的就是map的key,item就是map的值。

open表示該語句以什麼開始,close表示以什麼結束。

public listgettabsbyconditionlike(@param("list")listids);

}引數解釋:

type為工廠類的類物件,

method為對應的工廠類中的方法,方法中的@param(「list」)是因為批量插入傳入的是乙個list,但是mybatis會將其包裝成乙個map。其中map的key為「list」,value為傳入的list。

註解方式:當有一條插入不成功時,會整體回滾。

MyBatis批量插入資料

在程式中封裝了乙個list集合物件,然後需要把該集合中的實體插入到資料庫中,由於專案使用了spring mybatis的配置,所以打算使用mybatis批量插入,由於之前沒用過批量插入,在網上找了一些資料後最終實現了,把詳細過程貼出來 實體類trainrecord結構如下 public class ...

mybatis批量插入資料

有三種方式 裡面for迴圈 略mybatis batch模式插入 略對映檔案foreach方式插入 在對映檔案中使用 標籤 傳入引數為該物件的list集合 insert into auth role resource id,roleid,resourceid,createtime,updatetim...

Mybatis批量更新插入資料

熊大最近發現乙個批量更新時不用迴圈欄位的更新,跟各位撰碼人分享分享。同為碼農深知碼農不易,勿入坑。好了咱們來說正事兒,來看看這條sql update mydata table set status when then where id in 這無非就是根據id批量修改了mydata table這張表...