1. 程式人生 > >mybatis批量操作中標籤的使用

mybatis批量操作中標籤的使用

MyBatis使用,在進行批量操作時可以通過<foreach>標籤,對傳入的集合引數進行遍歷。

一、foreach標籤使用:

1.批量更新

dao層設定傳入引數,與遍歷的引數名保持一致: Integer batchUpdate(@Param("stuList") List<Student> stuList);

<update id="batchUpdate" parameterType="java.util.List">
      <foreach collection="stuList"  item="stu" separator="  " >
       update student        set  name = #{stu.name},         score = #{stu.score}        where id = #{stu.id,jdbcType=VARCHAR} ;     </foreach>     </update>

2.批量查詢,通常使用foreach構建in語句,實現批量查詢(見http://www.mybatis.org/mybatis-3/zh/dynamic-sql.html)

<selectid="selectPostIn"resultType="domain.blog.Post"
> SELECT * FROM POST P WHERE ID in <foreachitem="item"index="index"collection="list"open="("separator=","close=")"> #{item} </foreach></select>

二、<foreach>標籤元素詳解

foreach元素的屬性主要有 item,index,collection,open,separator,close。

    item表示集合中每一個元素進行迭代時的別名,
    index指 定一個名字,用於表示在迭代過程中,每次迭代到的位置,

 (使用map時,index屬性值為map中的Key的值)

    open表示該語句以什麼開始,
    separator表示在每次進行迭代之間以什麼符號作為分隔 符,
    close表示以什麼結束。

三、collection的選擇

在使用foreach的時候最關鍵的也是最容易出錯的就是collection屬性,該屬性是必須指定的,但是在不同情況 下,該屬性的值是不一樣的,主要有一下3種情況:

    1. 如果傳入的是單引數且引數型別是一個List的時候,collection屬性值為list
    2. 如果傳入的是單引數且引數型別是一個array陣列的時候,collection的屬性值為array
    3. 如果傳入的引數是多個的時候,我們就需要把它們封裝成一個Map了,當然單引數也可以封裝成map