首先分頁查詢的原理是SQL的limit關鍵字。
LIMIT?子句用于限制 SQL 查詢返回的記錄數。它接受一個或兩個整數參數,第一個參數表示偏移量,第二個參數表示返回的最大記錄數。
我們完全可以使用前端傳給我們的page,pageSize,自己去計算limit的參數,但是這樣效率很慢。
所以有了分頁插件pageHelper.
1 首先引入pageHeper的Maven坐標
<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId> </dependency>
2 在Controller層接受分頁請求
?主要參數是Page(第幾頁),PageSize(一頁的大小)
@GetMapping("/page")public Result<PageResult> Page(EmployeePageQueryDTO employeePageQueryDTO){PageResult pageResult=employeeService.PageQuery(employeePageQueryDTO);return Result.success(pageResult);}
? 這里參數用一個對象接收
3 Service層邏輯處理
????????PageHepler可以幫助我們計算limit的參數,并同時幫我們把limit加在普通的select語句中,變成分頁查詢。這樣一來執行分頁,我們只需要在Mapper配置普通的查詢語句,由PageHelper幫我們補上limit所需語句。
page繼承了ArrayList,所以它可以接收查詢的返回結果,多個數據本身就會返回一個集合。
如果不想用Page,直接使用ArrayList也是可以的,只不過Page有更多的功能,所以pageHeper和Page不是一定要一起使用.看自己的需求選擇。
/*** 員工分頁查詢* @param employeePageQueryDTO* @return*/@Overridepublic PageResult PageQuery(EmployeePageQueryDTO employeePageQueryDTO) {// PageHepler可以幫助我們計算limit的參數,并同時幫我們把limit加在普通的select語句中,變成條件查詢。PageHelper.startPage(employeePageQueryDTO.getPage(),employeePageQueryDTO.getPageSize());//執行分頁,我們只需要在Mapper配置普通的查詢語句,由上面的幫我們補上limit所需語句。//page繼承了ArrayList,所以它可以接收查詢的返回結果,多個數據本身就會返回一個集合。//如果不想用Page,直接使用ArrayList也是可以的,只不過Page有更多的功能Page<Employee> pages=employeeMapper.PageQuery(employeePageQueryDTO);PageResult pageResult=new PageResult();pageResult.setRecords(pages.getResult());return pageResult;}
4 Mapper層的SQL配置
Mapper接口
/*** 員工分頁查詢* @param employeePageQueryDTO* @return*/Page<Employee> PageQuery(EmployeePageQueryDTO employeePageQueryDTO);
Mapper對應SQL
<select id="PageQuery" resultType="Employee"> select * from employee <where><if test="name!=null and name!=''">name like concat("%",#{name},"%")</if> </where></select>
很明顯這里只是一個普通的查詢,并沒有limit語句,這正是pageHelper的作用,幫我們計算好參數,然后加入SQL語句。