MyBatis中foreach傳入引數為list、陣列、map的不同寫法
最近在做專案中遇到一個mybatis的問題,整了好久,怎麼改都報錯,最後發現竟然是寫法的問題。現將此坑總結如下。
collection屬性是在使用foreach的時候最關鍵的也是最容易出錯的,該屬性是必須指定的,但是在不同情況下,該屬性的值是不一樣的,如果不區分,就容易出錯。
主要有一下3種情況:
(1)如果傳入的是單引數且引數型別是一個List的時候,collection屬性值為list .(2)如果傳入的是單引數且引數型別是一個array陣列的時候,collection的屬性值為array .(筆者當時就錯在陣列這)
(3)如果傳入的引數是多個的時候,我們就需要把它們封裝成一個Map了,當然單引數也可以封裝成map,實際上如果你在傳入引數的時候,在MyBatis裡面也是會把它封裝成一個Map的,map的key就是引數名,所以這個時候collection屬性值就是傳入的List或array物件在自己封裝的map裡面的key.
這裡還要提到其中的foreach的用法:foreach主要用在構建in條件中,它可以在SQL語句中進行迭代一個集合。屬性主要有item,index,collection,open,separator,close。item表示集合中每一個元素進行迭代時的別名,index指定一個名字,用於表示在迭代過程中,每次迭代到的位置,open表示該語句以什麼開始,separator表示在每次進行迭代之間以什麼符號作為分隔符,close表示以什麼結束。
下面是三種型別資料的示例程式碼。
<!--List:forech中的collection屬性型別是List,collection的值必須是:list,item的值可以隨意,Dao介面中引數名字隨意 -->
<select id="getIteamsList" resultType="Employees">
select *
from EMPLOYEES e
where e.EMPLOYEE_ID in
<foreach collection="list" item="employeeId" index="index"
open="(" close=")" separator=",">
#{employeeId}
</foreach>
</select>
<!--Array:forech中的collection屬性型別是array,collection的值必須是:array,item的值可以隨意,Dao介面中引數名字隨意 -->
<select id="getItemsArray" resultType="Employees">
select *
from EMPLOYEES e
where e.EMPLOYEE_ID in
<foreach collection="array" item="employeeId" index="index"
open="(" close=")" separator=",">
#{employeeId}
</foreach>
</select>
<!--Map:forech中的collection屬性是map.key-->
<select id="getItemsMap" resultType="Employees">
select *
from EMPLOYEES e
<where>
<if test="departmentId!=null and departmentId!=''">
e.DEPARTMENT_ID=#{departmentId}
</if>
<if test="employeeIdsArray!=null and employeeIdsArray.length!=0">
AND e.EMPLOYEE_ID in
<foreach collection="employeeIdsArray" item="employeeId"
index="index" open="(" close=")" separator=",">
#{employeeId}
</foreach>
</if>
</where>
</select>
相關文章
- MyBatis中傳入引數為List集合的MyBatis
- Mybatis動態Sql的Foreach遍歷拼接輸入引數中的List或陣列MyBatisSQL陣列
- Mybatis傳入引數為List物件MyBatis物件
- mybatis list作為引數 foreach迴圈MyBatis
- Mybatis(五)--原始碼分析傳入單個list引數和多個list引數寫法MyBatis原始碼
- MyBatis引數傳入集合之foreach動態sqlMyBatisSQL
- MyBatis傳入多個引數,傳入陣列和列表資料的處理MyBatis陣列
- mybatis sql foreach 引數的傳入的三種情況!!MyBatisSQL
- 請求引數為物件,mybatis的sql寫法物件MyBatisSQL
- 為SQL Server資料庫傳陣列引數的變通辦法SQLServer資料庫陣列
- Mybatis中Foreach動態SQL標籤(map和list兩種情況)MyBatisSQL
- Java 陣列的不同定義方式和陣列長度為可變引數Java陣列
- java的byte陣列的不同寫法Java陣列
- mybatis 傳入多個引數MyBatis
- MyBatis傳入多個引數MyBatis
- 遍歷陣列的常用方法forEach,filter,map等陣列Filter
- Java 中陣列轉換為 ListJava陣列
- Mybatis中List傳值MyBatis
- Map轉實體類或List陣列陣列
- List ,Set,Map集合與陣列互轉陣列
- MyBatis 使用foreach與其他方式的時候引數傳遞方式MyBatis
- 給SQL Server傳送陣列引數的變通辦法(轉)SQLServer陣列
- 陣列的forEach,map,filter,reduce,reduceRight,every,some方法陣列Filter
- Mybatis parameterType 傳入多個引數的使用MyBatis
- MyBatis傳入多個引數的問題MyBatis
- Java中 set,list,array(集合與陣列)、Map相互轉換Java陣列
- mybatis 的傳入引數如何既有物件又有單個引數MyBatis物件
- mybatis關於list的foreach的使用MyBatis
- 一張圖看懂JavaScript中陣列的迭代方法:forEach、map、filter、reduce、every、someJavaScript陣列Filter
- mybatis 傳遞多個引數 --解決mybatis查詢使用多個引數方法--javabean傳統方法和map方法MyBatisJavaBean
- JS陣列迴圈的效能和效率分析(for、while、forEach、map、for of)JS陣列While
- Mybatis foreach 請求引數是物件集合MyBatis物件
- Mybatis引數傳遞MyBatis
- mybatis如何傳引數MyBatis
- mybatis 多引數 list和StringMyBatis
- c++ -- 二維陣列引數傳遞C++陣列
- Shell自學二(引數傳遞和陣列)陣列
- 【Scala篇】--Scala中集合陣列,list,set,map,元祖陣列