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傳入引數為List物件MyBatis物件
- Mybatis(五)--原始碼分析傳入單個list引數和多個list引數寫法MyBatis原始碼
- mybatis sql foreach 引數的傳入的三種情況!!MyBatisSQL
- 請求引數為物件,mybatis的sql寫法物件MyBatisSQL
- Mybatis中Foreach動態SQL標籤(map和list兩種情況)MyBatisSQL
- ts中如何限制方法傳入的引數data必須是陣列,且為偶數項?陣列
- 遍歷陣列的常用方法forEach,filter,map等陣列Filter
- 陣列的forEach,map,filter,reduce,reduceRight,every,some方法陣列Filter
- mybatis 傳入多個引數MyBatis
- mybatis關於list的foreach的使用MyBatis
- Java 中陣列轉換為 ListJava陣列
- Map轉實體類或List陣列陣列
- JS陣列迴圈的效能和效率分析(for、while、forEach、map、for of)JS陣列While
- Mybatis中List傳值MyBatis
- Mybatis parameterType 傳入多個引數的使用MyBatis
- mybatis 的傳入引數如何既有物件又有單個引數MyBatis物件
- Mybatis foreach 請求引數是物件集合MyBatis物件
- List Set Map之間的不同
- Mybatis系列:解決foreach標籤內list為空的問題MyBatis
- mybatis如何傳引數MyBatis
- Mybatis引數傳遞MyBatis
- c++ -- 二維陣列引數傳遞C++陣列
- Mybatis中foreach的使用MyBatis
- 15.MyBatis傳入多個引數的問題MyBatis
- java將Excel檔案上傳並解析為List陣列JavaExcel陣列
- 引數為*&與*的區別以及二維陣列傳遞時列數不對等的區別陣列
- JS中陣列遍歷方法foreach,filter,some,every,map方法介紹與總結JS陣列Filter
- Java中將 int[] 陣列 轉換為 List(ArrayList)Java陣列
- Shell自學二(引數傳遞和陣列)陣列
- Js傳遞陣列引數到後臺controller的方式JS陣列Controller
- SSM框架中Mybatis傳遞引數的幾種方法SSM框架MyBatis
- Java中List陣列互轉Java陣列
- 陣列的reduce操作+物件陣列的map操作陣列物件
- 二維陣列作為引數傳遞問題陣列
- Java中List與陣列互轉Java陣列
- Java後臺接收前端傳遞的陣列物件引數的處理Java前端陣列物件
- Map forEach() 方法