纔看到mybatis文檔上有這個,驚訝於本身摸索出來的和這個同樣。java
若是你的數據庫還支持多行插入, 你也能夠傳入一個Authors數組或集合,並返回自動生成的主鍵。 <insert id="insertAuthor" useGeneratedKeys="true" keyProperty="id"> insert into Author (username, password, email, bio) values <foreach item="item" collection="list" separator=","> (#{item.username}, #{item.password}, #{item.email}, #{item.bio}) </foreach> </insert>
------------更新 2017,11.1-------------------------------------------------------------------------------- 先看個示例,數據庫
<insert id="addRoleModule" parameterType="java.util.List"> INSERT INTO T_P_ROLE_MODULE (ROLE_ID, MODULE_ID) <foreach collection="list" item="item" index="index" separator=" UNION ALL "> SELECT #{item.roleId}, #{item.moduleId} FROM DUAL </foreach> </insert>
DUAL:虛擬表數組
小菜蟲搞了一夜,終於成功了: 貼下代碼獨自慶祝一下:mybatis
<!--批量插入--> <insert id="batchSave" parameterType="java.util.List"> INSERT INTO lab_lab_role_menu (role_id, menu_id) VALUES <foreach collection="list" item="rm" separator=","> (#{rm.roleId},#{rm.menuId}) </foreach> </insert>
老是出錯的緣由,先是傳給Mapper的參數不對,這個已經理解了。後來是foreach的open,close,separator的做用理解不透徹。何時用,用什麼。app
foreach的主要用在構建in條件中,它能夠在SQL語句中進行迭代一個集合。code
foreach元素的屬性主要有 item,index,collection,open,separator,close。xml
item表示集合中每個元素進行迭代時的別名,對象
index指 定一個名字,用於表示在迭代過程當中,每次迭代到的位置,文檔
open表示該語句以什麼開始,it
separator表示在每次進行迭代之間以什麼符號做爲分隔 符,
close表示以什麼結束,
在使用foreach的時候最關鍵的也是最容易出錯的就是collection屬性,該屬性是必須指定的,可是在不一樣狀況 下,該屬性的值是不同的,主要有一下3種狀況:
若是傳入的是單參數且參數類型是一個List的時候,collection屬性值爲list 若是傳入的是單參數且參數類型是一個array數組的時候,collection的屬性值爲array 若是傳入的參數是多個的時候,咱們就須要把它們封裝成一個Map了,固然單參數也能夠封裝成map,實際上若是你在傳入參數的時候,在breast裏面也是會把它封裝成一個Map的,map的key就是參數名,因此這個時候collection屬性值就是傳入的List或array對象在本身封裝的map裏面的key