1. 程式人生 > >MyBatis中foreach傳入引數為list、陣列、map的不同寫法

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>  

相關推薦

MyBatisforeach傳入引數list陣列map不同寫法

最近在做專案中遇到一個mybatis的問題,整了好久,怎麼改都報錯,最後發現竟然是寫法的問題。現將此坑總結如下。collection屬性是在使用foreach的時候最關鍵的也是最容易出錯的,該屬性是必須指定的,但是在不同情況下,該屬性的值是不一樣的,如果不區分,就容易出錯。主

MyBatisforeach傳入引數Poji裝飾類,list陣列不同寫法

foreach 屬性介紹 foreach 用於迭代傳入過來的引數。 它的屬性介紹分別是 collection:表示傳入過來的引數的資料型別。該引數為必選。要做 foreach 的物件,作為入參時,List 物件預設用 list 代替作為鍵,陣列物件有 array 代替作為鍵,Map 物

mybatissql傳入引數集合陣列時解決方式

平時我們寫sql時只需要傳入一個查詢引數或者幾個不同欄位的引數就足夠了,但是如果傳入的引數是集合、陣列的時候該怎麼辦呢? mybatis中的<foreach>標籤很好的提供了對這類問題的解

mybatis動態SQL--傳入引數集合,陣列型別

  當介面方法的傳入型別為List 或陣列Array 時,我們該如何操作 /** * * 1.單個的引數Mybatis不會做特殊處理 * #{這裡隨便寫什麼都可以} 它都能把這裡面的值取到 * 2.傳入物件POJO(普通的

Mybatisforeach 批處理 map 的鍵值 list 的操作

foreach一共有三種類型,分別為List,[](array),Map三種。 foreach的第一篇用來將List和陣列(array)。 下面表格是我總結的各個屬性的用途和注意點。 foreach屬性 屬性 描述 item 迴圈體中的具體物件。支援屬性的點

mybatis傳入引數map時如何在mapper.xml獲取

有時在開發中難免會遇到傳入的引數為map型別的時候, map的key為資料庫中的主鍵或者其他的唯一欄位, value為需要進行插入的值,在mybaits的XML檔案中進行遍歷取出map引數中的值, 有兩種方式進行處理方法一:xml檔案中寫法<update id="upd

mybaitis 的 mapper.xml 檔案 引數List集合SQL 的寫法

1、應用場景: 傳參: MaterialCodeList, activity_end_time,userCode 具體SQl: <if test> 的驗證: "MaterialCodeList != null and MaterialCodeList.size()>0"

python函式的預設引數list時出現異常分析

遇到一個奇怪的現象: '''python def f(x,l=[]): for i in range(x): l.append(i*i) print l f(2) f(3,[3,2,1]) f(3) ''' 講道理來說輸出

mybatis傳入引數string型別時,if標籤判斷引數值的方法

我們在用mybatis框架時,當傳入的值為string型別時且需要判斷時,如果用和引數為map型別的值一樣的方法來寫<if test="引數名!=null and ''!=引數名“>這時查詢時會報錯:There is no getter for property

mybatisforeach使用方法

system inline lan arrays tro edi rip property concat 作者:學無先後 達者為先 作者:偶爾記一下 foreach一共有三種類型,分別為List,[](array),Map三種。 下面表格是我總結的各個屬性的用途和註

mybatis foreach collection的三種用法

app key bsp arr onf array數組 自己 構建 符號 轉載:http://blog.sina.com.cn/s/blog_b0d90e8c0102v1q1.html 傳參參考:http://www.cnblogs.com/ruiati/p/6410339

記一下mybatisforeach循環遇到的一個小問題

apach binding ibatis div 元素 each循環 ram nes 結束 ---恢復內容開始--- 我在添加單條數據的時候,參數是一個map,沒有使用循環,直接map.字段,即使這個字段map中並不存在,也不會出錯 但是是一個List<Map>

mybatisforeach用法

在SQL語句中,foreach可以對陣列,Map或者實現了Iterable介面的物件進行遍歷, foreach包含以下屬性: collection:必填,值為要迴圈的屬性名,預設為list item:變數名,值為迭代物件中取出的每一個值。 index:索引的屬性名,在集合陣列情況下值

jssetTimeout() 時間引數0

當看到下面 這種setTimeout 設定為0 寫法的時候一臉懵逼,完全沒用過。 var fuc = [1,2,3]; for(var i in fuc){ setTimeout(function(){console.log(fuc[i])},0); console.log(fuc[i]);

Mybatis#{}和${}輸入引數的區別

#{} mybatis 會進行預編譯,比如(假設ID=6): select * from user where id=#{ID} 會先編譯成 select * from user where id=? 然後用ID的值(6)替代? #{}的優勢 更安全 如果傳

Mybatis#{}和${}的區別以及對sql注入預編譯jdbcType的說明

#{}和${}都可以獲取map中的值或者pojo物件屬性的值; sql語句示例: select * from tbl_employee where id=${id} and last_name=#{lastName} Preparing: select * from tbl_employee

關於Springboot+Mybatis返回結果集Map時其內的Key轉換駝峰的命名(2種方法)

使用場景: 使用mybatis的時候,簡單的連表查詢,用Map接收的時候,都是像DB定義的欄位一樣,類似以下 student_name,student_id,沒有轉換為駝峰,但是又不能因為這一個定義一個javabean來對映資料庫欄位集合,這樣,會有無窮無盡的javabea

mybatis foreach的用法

在mybatis(mybatis-3.4.5)的官方文件中,給了僅僅這麼一個例子: <select id="selectPostIn" resultType="domain.blog.Post"> SELECT * FROM POST P WHERE ID in

mybatisforeach的基本使用

1.<foreach collection="" index="" item="" open="" separator="" close=""></foreach> 其中屬性: collection:此屬性必須指定 且有三種形式,如果是傳的單引數陣列

Spring使用MapSetList陣列屬性集合的注入方法配置檔案

(1)下邊的一個java類包含了所有Map、Set、List、陣列、屬性集合等這些容器,主要用於演示Spring的注入配置; package com.lc.collection; import java.util.List; import java.util.Map;