jdbcTemplate 后台接口中的分页
Springboot+jdbcTemplate? 對查詢結(jié)果列表做分頁,
之前開發(fā)的小項目,數(shù)據(jù)逐漸增多,每次返回所有的查詢結(jié)果,耗費性能和時間
想到做分頁。 于是從簡單的分頁做起。 jdbcTemplate中實現(xiàn)分頁。
?
新增一個頁面對象, 分頁需要知道當(dāng)前是第幾頁,每頁多少條數(shù), 一共有多少頁。查詢顯示的列表信息。 更多的還有數(shù)據(jù)排序,按照哪一個字段進(jìn)行、或者哪幾個字段進(jìn)行 升序或者降序的排列。
PageList頁面對象
package com.example.demo.utils;import java.util.ArrayList; import java.util.List;/*** 封裝分頁對象**/ public class PageList {private int page; //當(dāng)前頁private int totalRows; //總行數(shù)private int pages; //總頁數(shù)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")@ResponseBodypublic 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("目前分頁的總頁數(shù)是"+pages);pageList.setPages(pages);pageList.setList(list);return pageList;}?
int類型,沒有傳入值的時候,做的處理;
第幾頁,每頁的行數(shù),是傳進(jìn)來的數(shù)據(jù),
拼接到sql中進(jìn)行查詢的時候,用limit做限制,比如下面的
@Overridepublic List<User> findAllbyPage(int pagenum, int pagerow) {int starter = (pagenum-1)*pagerow;String sql = "select id, name, age from user order by id asc limit " + starter +" , "+ pagerow;List<User> list = jdbcTemplate.query(sql,new UserRowMapper());return list;}?
【需要注意limit后面有空格, pagenum 和 pagerow 之間除了有逗號外,還有空格】
?
?
pagenum需要設(shè)置一下,最好新增一個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條記錄
?
查詢結(jié)果:
請求的內(nèi)容:
GET http://localhost:8080/findAllbyPager?pagenum=5&pagerow=2
返回的結(jié)果:
?
?
?更詳細(xì)的的信息,比如如何獲取總條數(shù),請看下面的github中代碼
https://github.com/JasmineQian/SpringDemo_2019/tree/master/jdbcTemplate2page
轉(zhuǎn)載于:https://www.cnblogs.com/qianjinyan/p/10357485.html
總結(jié)
以上是生活随笔為你收集整理的jdbcTemplate 后台接口中的分页的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Nginx + Node + Vue 部
- 下一篇: SPIDR - 完美分割用户故事的五种简