MyBatis傳入參數為集合 list 數組 map寫法

來源:互聯網
上載者:User

標籤:from   test   rac   tail   參數   出錯   語句   last   map   

foreach的主要用在構建in條件中,它可以在SQL語句中進行迭代一個集合。foreach元素的屬性主要有item,index,collection,open,separator,close。item表示集合中每一個元素進行迭代時的別名,index指定一個名字,用於表示在迭代過程中,每次迭代到的位置,open表示該語句以什麼開始,separator表示在每次進行迭代之間以什麼符號作為分隔字元,close表示以什麼結束,在使用foreach的時候最關鍵的也是最容易出錯的就是collection屬性,該屬性是必須指定的,但是在不同情況下,該屬性的值是不一樣的,主要有一下3種情況: 

    1. 如果傳入的是單參數且參數類型是一個List的時候,collection屬性值為list .
    2. 如果傳入的是單參數且參數類型是一個array數組的時候,collection的屬性值為array .
    3. 如果傳入的參數是多個的時候,我們就需要把它們封裝成一個Map了,當然單參數也可以封裝成map,實際上如果你在傳入參數的時候,在MyBatis裡面也是會把它封裝成一個Map的,map的key就是參數名,所以這個時候collection屬性值就是傳入的List或array對象在自己封裝的map裡面的key.
      1. 下面我們通過代碼實踐: 資料表:採用Oracle的HR.Employees表        實體:Employees
        public class Employees {
            private Integer employeeId;
            private String firstName;
            private String lastName;
            private String email;
            private String phoneNumber;
            private Date hireDate;
            private String jobId;
            private BigDecimal salary;
            private BigDecimal commissionPct;
            private Integer managerId;
            private Short departmentId;
        }  
        對應檔:

            <!--List:forech中的collection屬性類型是List,collection的值必須是:list,item的值可以隨意,Dao介面中參數名字隨意 -->
            <select id="getEmployeesListParams" 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的值必須是:list,item的值可以隨意,Dao介面中參數名字隨意 -->
            <select id="getEmployeesArrayParams" 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,其它所有屬性都是map.key,比如下面的departmentId -->
            <select id="getEmployeesMapParams" 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>

        Mapper類:
        public interface EmployeesMapper { 

            List<Employees> getEmployeesListParams(List<String> employeeIds);

            List<Employees> getEmployeesArrayParams(String[] employeeIds);

            List<Employees> getEmployeesMapParams(Map<String,Object> params);
        } http://blog.csdn.net/small____fish/article/details/8029030

MyBatis傳入參數為集合 list 數組 map寫法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.