MyBatis批量插入

纔看到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種狀況:

  1. 若是傳入的是單參數且參數類型是一個List的時候,collection屬性值爲list
  2. 若是傳入的是單參數且參數類型是一個array數組的時候,collection的屬性值爲array
  3. 若是傳入的參數是多個的時候,咱們就須要把它們封裝成一個Map了,固然單參數也能夠封裝成map,實際上若是你在傳入參數的時候,在breast裏面也是會把它封裝成一個Map的,map的key就是參數名,因此這個時候collection屬性值就是傳入的List或array對象在本身封裝的map裏面的key
相關文章
相關標籤/搜索