jdbcTemplate 後臺介面中的分頁
Springboot+jdbcTemplate 對查詢結果列表做分頁,
之前開發的小專案,資料逐漸增多,每次返回所有的查詢結果,耗費效能和時間
想到做分頁。 於是從簡單的分頁做起。 jdbcTemplate中實現分頁。
新增一個頁面物件, 分頁需要知道當前是第幾頁,每頁多少條數, 一共有多少頁。查詢顯示的列表資訊。更多的還有資料排序,按照哪一個欄位進行、或者哪幾個欄位進行 升序或者降序的排列。
PageList頁面物件
package com.example.demo.utils; import java.util.ArrayList; import java.util.List; /** * 封裝分頁物件 **/ public class PageList { private int page;//當前頁 private int totalRows;//總行數 private int pages;//總頁數 private List list=new ArrayList(); public int getPage() { return page; } public void setPage(int page) { this.page = page; } public int getPages() { return pages; } public void setPages(int pages) { this.pages = pages; } public List getList() { if(list==null){ list=new ArrayList(); } return list; } public void setList(List list) { this.list = list; } public int getTotalRows() { return totalRows; } public void setTotalRows(int totalRows) { this.totalRows = totalRows; } }
其他就是在controller中新增
@GetMapping("/findAllbyPager") @ResponseBody public PageList findAllbyPager(int pagenum, int pagerow) { PageList pageList = new PageList(); if(pagenum == 0){pagenum=1;} if(pagerow == 0){pagenum=30;} List<User> list= userService.findAllbyPage(pagenum, pagerow ); int TotalRows = userService.countAll(); pageList.setPage(pagenum); pageList.setTotalRows(TotalRows); int pages= 0; if(TotalRows % pagerow == 0){ pages = TotalRows / pagerow;} else { pages = TotalRows / pagerow +1 ;} System.out.println("目前分頁的總頁數是"+pages); pageList.setPages(pages); pageList.setList(list); return pageList; }
int型別,沒有傳入值的時候,做的處理;
第幾頁,每頁的行數,是傳進來的資料,
拼接到sql中進行查詢的時候,用limit做限制,比如下面的
@Override public List<User> findAllbyPage(int pagenum, int pagerow) { int starter = (pagenum-1)*pagerow; String sql = "select id, name, age from user order by id asclimit " + starter +" , "+ pagerow; List<User> list = jdbcTemplate.query(sql,new UserRowMapper()); return list; }
【需要注意limit後面有空格, pagenum 和 pagerow 之間除了有逗號外,還有空格】
pagenum需要設定一下,最好新增一個starter表示從第幾行開始
第一頁從1開始
第二頁從 (2-1)*pageROW 開始, 我這邊省略
select * from table limit m,n
其中m是指記錄開始的index,從0開始,表示第一條記錄
n是指從第m+1條開始,取n條。
select * from tablename limit 0,5
即取出第1條至第5條,5條記錄
select * from tablename limit 5,5
即取出第6條至第10條,5條記錄
查詢結果:
請求的內容:
GET http://localhost:8080/findAllbyPager?pagenum=5&pagerow=2
返回的結果:
更詳細的的資訊,比如如何獲取總條數,請看下面的github中程式碼
https://github.com/JasmineQian/SpringDemo_2019/tree/master/jdbcTemplate2page