在SQL中,參數的順序有兩種表示方式,分別為使用 arg0、arg1… 和使用 param1、param2…。此方法可讀性較低,在開發中不建議使用。在我的測試中,參數的定義並不受限於上述格式,可以隨意定義
/** * 分页查询 -- 顺序传参 * @param startIndex 开始索引 * @param pageSize 每页条数 * @return */ List<User> findPage(int startIndex,int pageSize);
<!-- 分页查询-顺序传参 --> <select id="findPage" resultType="com.mybatisstudy.pojo.User"> select * from user limit #{param1},#{param2} </select>
這裡我發現不用定義參數型別也可以
// 测试分页查询方法 -- 顺序传参 @Test public void testFindPage(){ List<User> users = userMapper.findPage(0,3); users.forEach(System.out::println); }
由於這裡的起始條數是從0開始,資料的id從1開始,所以,別驚訝
在介面方法的參數清單中透過@Param定義參數名稱,在Sql語句中透過註解中所定義的參數名稱指定參數位置。此方式參數比較直覺的,建議使用。
/** * 分页查询 -- @param传参 * @param startIndex 开始索引 * @param pageSize 每页条数 * @return */ List<User> findPage1(@Param("startIndex")int startIndex,@Param("pageSize")int pageSize);
<!-- 分页查询-@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); }
三、自訂POJO類傳參
1. 自訂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; } }
這裡同樣要注意的是,參數名稱要和自訂的POJO類別的成員變數名稱要一致,否則同樣會報錯 4. 新增測試方法/** * 分页查询 -- 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传参 @Test public void testFindPage2(){ PageQuery pageQuery = new PageQuery(2,3); List<User> users = userMapper.findPage2(pageQuery); users.forEach(System.out::println); }
/** * 分页查询 -- Map传参 * @param Map * @return */ List<User> findPage3(Map<String,Object> params);
<!-- 分页查询-Map传参 --> <select id="findPage3" resultType="com.mybatisstudy.pojo.User" parameterType="map"> select * from user limit #{startIndex},#{pageSize} </select>
// 测试分页查询方法 -- 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); }
以上是Java中Mybatis分頁查詢的傳參方式有哪些的詳細內容。更多資訊請關注PHP中文網其他相關文章!