在程式中封裝了乙個list集合物件,然後需要把該集合中的實體插入到資料庫中,由於專案使用了spring+mybatis的配置,所以打算使用mybatis批量插入,由於之前沒用過批量插入,在網上找了一些資料後最終實現了,把詳細過程貼出來。
實體類trainrecord結構如下:
? 1
2
3
4
5
6
7
8
9
public
class
trainrecord
implements
serializable
?1
2
3
4
5
6
7
?
12
3
4
5
6
7
8
9
10
11
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:
? 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public
class
mysqlbasedao
extends
sqlsessiondaosupport
//其餘方法省略
}
trainrecord實體類對應的trainrecorddao 定義如下:
? 1
2
3
4
5
6
7
8
9
10
11
12
13
14
public
class
trainrecorddao
extends
mysqlbasedao
//省略其餘的方法
}
然後直接呼叫trainrecorddao 中的 addtrainrecordbatch方法就可以批量插入了。
? 1
2
3
select * from t_train_record t where t.activity_id=#
]]>
這樣做的目的主要是因為在 xml 元素中,"<" 和 "&" 是非法的。"<" 會產生錯誤,因為解析器會把該字元解釋為新元素的開始。"&" 也會產生錯誤,因為解析器會把該字元解釋為字元實體的開始。而sql語句或者指令碼語句中可能會存在 "<" 或 "&" 字元。為了避免錯誤,可以將sql語句定義為 cdata。cdata 部分中的所有內容都會被解析器忽略。
當時我在addtrainrecordbatch方法中也用了這種用法:
? 1
2
3
4
5
6
7
insert into t_train_record (add_time,emp_id,activity_id,flag)
values
(#,#,#,#)
]]>
結果程式在執行時老是報錯: com.mysql.jdbc.exceptions.jdbc4.mysqlsyntaxerrorexception,檢視錯誤資訊就是傳入的引數都是null。糾結了很久,後面才發現原來是把xml中的標籤括起來後把標籤直接當成字串處理了。後面把外面的去掉後就能正常執行了
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...
mybatis 批量插入
單字段的批量更新如 list存的只有id 將前端接收的id集合拼接的字串解析 listidlist new arraylist idlist.add 1 idlist.add 2 idlist.add 3 要修改的資訊 sql語句類似 update role set modifier modify ...
mybatis批量插入,批量更新
insert into t ingco trade lithium electric product product no,li e product no,transpor report number,msds,transpor report number path,msds path,un tes...