首頁 > Java > java教程 > Java中Mybatis分頁查詢的傳參方式有哪些

Java中Mybatis分頁查詢的傳參方式有哪些

王林
發布: 2023-05-19 10:16:19
轉載
1053 人瀏覽過

一、順序傳參

在SQL中,參數的順序有兩種表示方式,分別為使用 arg0、arg1… 和使用 param1、param2…。此方法可讀性較低,在開發中不建議使用。在我的測試中,參數的定義並不受限於上述格式,可以隨意定義

 1. 持久層介面方法

/**
     * 分页查询 -- 顺序传参
     * @param startIndex 开始索引
     * @param pageSize 每页条数
     * @return
     */
    List<User> findPage(int startIndex,int pageSize);
登入後複製

2. UserMapper.xml映射檔新增標籤

<!-- 分页查询-顺序传参 -->
    <select id="findPage" resultType="com.mybatisstudy.pojo.User">
        select * from user limit #{param1},#{param2}
    </select>
登入後複製

這裡我發現不用定義參數型別也可以 

3. 新增測試方法

// 测试分页查询方法 -- 顺序传参
    @Test
    public void testFindPage(){
        List<User> users = userMapper.findPage(0,3);
        users.forEach(System.out::println);
    }
登入後複製

4. 運行結果

Java中Mybatis分頁查詢的傳參方式有哪些

由於這裡的起始條數是從0開始,資料的id從1開始,所以,別驚訝

二、@param傳參

在介面方法的參數清單中透過@Param定義參數名稱,在Sql語句中透過註解中所定義的參數名稱指定參數位置。此方式參數比較直覺的,建議使用。

 1. 持久層介面方法

/**
     * 分页查询 -- @param传参
     * @param startIndex 开始索引
     * @param pageSize 每页条数
     * @return
     */
    List<User> findPage1(@Param("startIndex")int startIndex,@Param("pageSize")int pageSize);
登入後複製

2. UserMapper.xml對應檔案新增標籤

<!-- 分页查询-@param传参 -->
    <select id="findPage1" resultType="com.mybatisstudy.pojo.User">
        select * from user limit #{startIndex},#{pageSize}
    </select>
登入後複製

##注意,這裡裡面的參數就一定要和持久層介面的參數一致,否則就會報錯 

 3. 新增測試方法

// 测试分页查询方法 -- @param传参
    @Test
    public void testFindPage1(){
        List<User> users = userMapper.findPage1(3,3);
        users.forEach(System.out::println);
    }
登入後複製

4. 執行結果

Java中Mybatis分頁查詢的傳參方式有哪些

三、自訂POJO類傳參Java中Mybatis分頁查詢的傳參方式有哪些

自訂POJO類,該類別的屬性就是要傳遞的參數,在SQL語句中綁定參數時使用POJO的屬性名作為參數名即可。此方式推薦使用。

 1. 自訂POJO類別

由於這裡我們需要兩個參數,一個是查詢開始條數,一個是每頁有多少條數,所以這個pojo類別只需要兩個參數即可

package com.mybatisstudy.pojo;
 
public class PageQuery {
    private int startIndex;
    private int pageSize;
 
    public PageQuery(int i, int i1) {
        this.startIndex = i;
        this.pageSize = i1;
    }
 
    public int getStartIndex() {
        return startIndex;
    }
 
    public void setStartIndex(int startIndex) {
        this.startIndex = startIndex;
    }
 
    public int getPageSize() {
        return pageSize;
    }
 
    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }
}
登入後複製

2.持久層介面方法
/**
     * 分页查询 -- POJO传参
     * @param PageQuery
     * @return
     */
    List<User> findPage2(PageQuery pageQuery);
登入後複製

3. UserMapper.xml對應檔案新增標籤

<!-- 分页查询-POJO传参 -->
    <select id="findPage2" resultType="com.mybatisstudy.pojo.User" parameterType="com.mybatisstudy.pojo.PageQuery">
        select * from user limit #{startIndex},#{pageSize}
    </select>
登入後複製

#   
這裡同樣要注意的是,參數名稱要和自訂的POJO類別的成員變數名稱要一致,否則同樣會報錯 

 4. 新增測試方法

// 测试分页查询方法 -- POJO传参
    @Test
    public void testFindPage2(){
        PageQuery pageQuery = new PageQuery(2,3);
        List<User> users = userMapper.findPage2(pageQuery);
        users.forEach(System.out::println);
    }
登入後複製
Java中Mybatis分頁查詢的傳參方式有哪些5. 運行結果

############四、Map傳參#########如果不想自訂POJO,可以使用Map作為傳遞參數的載體,在SQL語句中綁定參數時使用Map的Key作為參數名稱即可。此方法建議使用 ######### 1.持久層介面方法###
/**
     * 分页查询 -- Map传参
     * @param Map
     * @return
     */
    List<User> findPage3(Map<String,Object> params);
登入後複製
###2. UserMapper.xml對應檔案新增標籤###
<!-- 分页查询-Map传参 -->
    <select id="findPage3" resultType="com.mybatisstudy.pojo.User" parameterType="map">
        select * from user limit #{startIndex},#{pageSize}
    </select>
登入後複製
##########這裡同樣要注意的是,參數個數要和你map集合的個數一致,且參數名稱要和map集合裡面的key的名稱要一致,否則同樣報錯############ 3. 新增測試方法###
// 测试分页查询方法 -- Map传参
    @Test
    public void testFindPage3(){
        Map<String,Object> params = new HashMap<>();
        params.put("startIndex",0);
        params.put("pageSize",4);
        List<User> users = userMapper.findPage3(params);
        users.forEach(System.out::println);
    }
登入後複製
###4. 執行結果#############

以上是Java中Mybatis分頁查詢的傳參方式有哪些的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:yisu.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板