MyBatis批量插入資料

2021-08-27 20:19:09 字數 1824 閱讀 7784

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

實體類trainrecord結構如下:

public class trainrecord implements serializable

select

last_insert_id()

insert into t_train_record (add_time,emp_id,activity_id,flag)

values

(#,#,#,#)

foreach的主要用在構建in條件中,它可以在sql語句中進行迭代乙個集合。foreach元素的屬性主要有 item,index,collection,open,separator,close。item表示集合中每乙個元素進行迭代時的別名,index指 定乙個名字,用於表示在迭代過程中,每次迭代到的位置,open表示該語句以什麼開始,separator表示在每次進行迭代之間以什麼符號作為分隔 符,close表示以什麼結束,在使用foreach的時候最關鍵的也是最容易出錯的就是collection屬性,該屬性是必須指定的,但是在不同情況 下,該屬性的值是不一樣的,主要有一下3種情況:

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

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

3.如果傳入的引數是多個的時候,我們就需要把它們封裝成乙個map了,當然單引數也可以封裝成map

關於foreach的具體例子在這裡就先不舉,以後有機會可以把每一種情況都舉乙個例子列出來。

mysqlbasedao:

public class mysqlbasedao extends sqlsessiondaosupport 

//其餘方法省略

}

trainrecord實體類對應的trainrecorddao 定義如下:

public class trainrecorddao extends mysqlbasedao 

//省略其餘的方法

}

然後直接呼叫trainrecorddao 中的 addtrainrecordbatch方法就可以批量插入了。

這樣做的目的主要是因為在 xml 元素中,"<" 和 "&" 是非法的。"<" 會產生錯誤,因為解析器會把該字元解釋為新元素的開始。"&" 也會產生錯誤,因為解析器會把該字元解釋為字元實體的開始。而sql語句或者指令碼語句中可能會存在 "<" 或 "&" 字元。為了避免錯誤,可以將sql語句定義為 cdata。cdata 部分中的所有內容都會被解析器忽略。

當時我在addtrainrecordbatch方法中也用了這種用法:

(#,#,#,#)

]]>

結果程式在執行時老是報錯: com.mysql.jdbc.exceptions.jdbc4.mysqlsyntaxerrorexception,檢視錯誤資訊就是傳入的引數都是null。糾結了很久,後面才發現原來是把xml中的標籤括起來後把標籤直接當成字串處理了。後面把外面的去掉後就能正常執行了。

引用此位仁兄作品,再次謝謝![url]

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這張表...

MyBatis 批量插入

1.遇到問題 insert at least 1 column 報錯說 至少插入一列 錯誤的語句 select studentcode,roomcode,n x,n y from把括號去掉 select studentcode,roomcode,n x,n y from 2.column count...