jdbcTemplate 后台接口中的分页

Posted 夏天里的Jasmine

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 

 

以上是关于jdbcTemplate 后台接口中的分页的主要内容,如果未能解决你的问题,请参考以下文章

使用 jdbcTemplate 进行分页

查询后经过后台处理的数据的分页显示

基于jqgrid + ashx + nhibernate的分页

java查询的分页思路!!

UserList.vue组件中用钩子函数初始化第一页的分页数据

phpcms v9后台多表查询分页代码