MyBatis批量插入 insert 資料操作

2021-08-19 16:06:50 字數 3506 閱讀 1970

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

實體類trainrecord結構如下:

? 1

2

3

4

5

6

7

8

9

publicclasstrainrecordimplementsserializable?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

publicclassmysqlbasedaoextendssqlsessiondaosupport

//其餘方法省略

}

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

? 1

2

3

4

5

6

7

8

9

10

11

12

13

14

publicclasstrainrecorddaoextendsmysqlbasedao

//省略其餘的方法

}

然後直接呼叫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...