您好,登錄后才能下訂單哦!
本篇內容介紹了“MyBatis分頁插件PageHelper如何使用”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
(1)概念:
①頁碼:pageNum(用戶會發送請求,攜帶頁碼pageNum給服務器)
②每頁顯示的記錄條數:pageSize,例如:百度默認的是每頁展示10條記錄
③實際上每一次在進行分頁請求發送的時候,都是要發送兩個數據:pageNum和pageSize給服務器
④實際上前端提交表單的數據格式應如下:uri?pageNum=1&pageSize=10,后端調用request.getParameter方法獲取到對應的頁碼和每頁顯示的記錄條數
(2)mysql當中的分頁SQL應該怎么寫?
①使用limit關鍵字,語法格式:limit startIndex,pageSize
②第?個數字:startIndex(起始下標,下標從0開始)
③第?個數字:pageSize(每?顯示的記錄條數)
④假設已知?碼pageNum,還有每?顯示的記錄條數pageSize,那么第?個數字是可以動態的獲取的:startIndex = (pageNum - 1) * pageSize
(3)標準通?的mysql分?SQL:
select * from tableName ...... limit (pageNum - 1) * pageSize, pageSize
(4)使用limit關鍵字編寫代碼進行分頁
三兄弟之一:CarMapper接口,編寫方法
package com.bjpowernode.mybatis.mapper; import com.bjpowernode.mybatis.pojo.Car; import org.apache.ibatis.annotations.Param; import java.util.List; public interface CarMapper { /** * 分頁查詢 * @param startIndex 起始下標 * @param pageSize 每頁顯示的記錄條數 * @return */ List<Car> selectAllByPage(@Param("startIndex") int startIndex, @Param("pageSize") int pageSize); }
三兄弟之二:CarMapper.xml文件,編寫sql語句
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.bjpowernode.mybatis.mapper.CarMapper"> <select id="selectAllByPage" resultType="Car" > select * from t_car limit #{startInde},#{pageSize} </select> </mapper>
三兄弟之三:CarMappeTest類,用來編寫測試類
package com.bjpowernode.mybatis.test; import com.bjpowernode.mybatis.mapper.CarMapper; import com.bjpowernode.mybatis.pojo.Car; import com.bjpowernode.mybatis.utils.SqlSessionUtil; import org.apache.ibatis.session.SqlSession; import org.junit.Test; import java.util.List; public class CarMapperTest { @Test public void testSelectAllByPage(){ // 應該是從前端獲取到頁碼 int pageNum = 2; // 應該是從前端獲取到每頁顯示的條數 int pageSize = 2; // 起始下標 int startIndex = (pageNum-1)*pageSize; SqlSession sqlSession = SqlSessionUtil.openSession(); CarMapper mapper = sqlSession.getMapper(CarMapper.class); List<Car> cars = mapper.selectAllByPage(startIndex, pageSize); cars.forEach(car -> System.out.println(car)); sqlSession.close(); } }
執行結果:
對應的是數據庫表中:起始下標為2開始的后兩條數據(下標從0開始)
(5)其實獲取數據并不難,難的是獲取分?相關的數據?較難(例如:總記錄條數、是否有上/下一頁、分頁的導航顯示多少個);這些可以借助mybatis的PageHelper插件。
使?PageHelper插件進?分?,更加的便捷!
第一步:pom.xml中引入依賴
<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.3.1</version> </dependency>
第二步:在mybatis-config.xml?件中配置插件
<!--mybatis分頁的攔截器--> <plugins> <plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin> </plugins>
第三步:編寫Java代碼
三兄弟之一:CarMapper接口,編寫方法
package com.bjpowernode.mybatis.mapper; import com.bjpowernode.mybatis.pojo.Car; import org.apache.ibatis.annotations.Param; import java.util.List; public interface CarMapper { /** * 查詢所有的Car,通過分頁查詢插件PageHelper完成 * @return */ List<Car> selectAll(); }
三兄弟之二:CarMapper.xml文件,編寫sql語句
使用了分頁插件PageHelper就不需要使用limit關鍵字了,直接正常查詢即可!
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.bjpowernode.mybatis.mapper.CarMapper"> <select id="selectAll" resultType="Car"> select * from t_car </select> </mapper>
三兄弟之三:CarMappeTest類,用來編寫測試類
注:在執行DQL語句之前,開啟分頁功能!
調用PageHelper的startPage(pageNum,pageSize)方法:
①第一個參數是頁碼pageNum
②第二個參數還是每頁顯示的記錄條數pageSize
package com.bjpowernode.mybatis.test; import com.bjpowernode.mybatis.mapper.CarMapper; import com.bjpowernode.mybatis.pojo.Car; import com.bjpowernode.mybatis.utils.SqlSessionUtil; import com.github.pagehelper.PageHelper; import org.apache.ibatis.session.SqlSession; import org.junit.Test; import java.util.List; public class CarMapperTest { @Test public void testSelectAll(){ SqlSession sqlSession = SqlSessionUtil.openSession(); CarMapper mapper = sqlSession.getMapper(CarMapper.class); // 在執行DQL語句之前,開啟分頁 int pageNum = 2; // 第二頁 int pageSize = 3; // 每頁顯示的條數 PageHelper.startPage(pageNum,pageSize); List<Car> cars = mapper.selectAll(); cars.forEach(car -> System.out.println(car)); sqlSession.close(); } }
執行結果:實際上PageHelper是在SQL語句后面自動加上了limit關鍵字
第2頁,每頁顯示的條數是3,對應的數據庫表中的數據就是:
第四步:獲取PageInfo對象
關鍵點:
①在查詢語句之前,開啟分?功能。
②在查詢語句之后,封裝PageInfo對象(PageInfo對象將來會存儲到request域當中。在??上展示)
package com.bjpowernode.mybatis.test; import com.bjpowernode.mybatis.mapper.CarMapper; import com.bjpowernode.mybatis.pojo.Car; import com.bjpowernode.mybatis.utils.SqlSessionUtil; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import org.apache.ibatis.session.SqlSession; import org.junit.Test; import java.util.List; public class CarMapperTest { @Test public void testSelectAll(){ SqlSession sqlSession = SqlSessionUtil.openSession(); CarMapper mapper = sqlSession.getMapper(CarMapper.class); // 1. 在執行DQL語句之前,開啟分頁 int pageNum = 1; // 第一頁 int pageSize = 3; // 每頁顯示的條數 PageHelper.startPage(pageNum,pageSize); // 2. 執行SQL語句 List<Car> cars = mapper.selectAll(); // 3. 執行DQL之后,封裝PageInfo對象,new PageInfo對象 // 第二個參數就是分頁導航的卡片個數 PageInfo<Car> carPageInfo = new PageInfo<>(cars, 3); System.out.println(carPageInfo); sqlSession.close(); } }
執行結果:
列舉幾個常用的屬性:
①pageNum-頁碼, pageSize-每頁顯示的記錄, size=3, startRow-從第幾條數據開始, endRow-從第幾條數據結束, total-總記錄條數, pages-頁數,
②prePage-上一頁的頁碼, nextPage-下一頁的頁碼, isFirstPage-,是否是第一頁 isLastPage-是否是最后一頁, hasPreviousPage-有沒有上一頁, hasNextPage-有沒有下一頁
③navigatePages-導航頁碼, navigateFirstPage-導航第一頁是幾, navigateLastPage-導航最后一頁是幾, navigatepageNums-存在數據的導航頁
怎么用?
在javaweb當中,代用request.setAttribute("pageInfo",carPageInfo)方法,把數據放到request域當中;然后從request域當中取出分頁的信息,在前端進行展示!
“MyBatis分頁插件PageHelper如何使用”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。