MyBatis的foreach語句

在Mybatis的xml配置中使用集合,主要是用到了foreach動態語句。

foreach的參數:
foreach元素的屬性主要有 item,index,collection,open,separator,close。
item表示集合中每一個元素進行迭代時的別名.
index指定一個名字,用於表示在迭代過程中,每次迭代到的位置.
open表示該語句以什麼開始,separator表示在每次進行迭代之間以什麼符號作爲分隔符.
close表示以什麼結束。


1. Mybatis生成select * from table where id in(1,2,...,n)語句的查詢

我們一般的做法是在方法的參數處指定傳入的參數名稱,在xml中使用的時候,集合的名稱要和方法的Param的名稱一致,這樣便於閱讀和理解,然後是在對應的xml文件中使用foreach循環。

java代碼如下:


public abstract List findByIds(@Param("ids")List ids);

對應的xml代碼如下:


select * from table

    id in #{item}

2.Mybatis保存多條記錄

我們同樣是通過foreach的方法來實現,這裏我們巧妙的利用了sql的語法規則用Mybatis的foreach動態語句來處理。

java代碼:


public abstract void saves(@Param("tables")List tables);

xml代碼:


insert into table(name,addtime) values
  
    (#{item.name},#{item.addtime})

以上方法Mybatis會幫我們進行sql注入攔截,Mybatis如果採用#{xxx}的形式設置參數,Mybatis會進行sql注入的過濾。如果採用的是${xxx},Mybatis不會進行sql注入過濾,而是直接將參入的內容輸出爲sql語句。

 

3、數據

     // 存儲條件
        Map params = new HashMap();
        // 選中學生證件號碼
        String[] zjhmArray = zjhmList.replace(" ", "").split(",");
        // 證件號碼
        params.put("zjhmArray", zjhmArray);

4、sql語句

  <<delete id="delTPsinfoRevPrivate">>

 DELETE T_PSINFO_REV_PRIVATE a
         WHERE a.DELFLG = '0'
           AND a.ZJHM IN
      <<if test="zjhmArray != null and zjhmArray.length != 0">>
           <<foreach collection="zjhmArray" index="index" item="item" open="(" close=")" separator=",">>

                #{item}
            <</foreach>>

      <</if>>

 <</delete>>

發佈了119 篇原創文章 · 獲贊 8 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章