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 asc  limit " + 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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM