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 后台接口中的分页的更多相关文章

  1. 在vue-cli搭建的项目中在后台mock接口中支持req.body和req.cookies

    在<vue-cli搭建的项目中增加后台mock接口>中实现了后台mock,但是前端post的t数据都要在mock的后台接口中使用req的接收数据事件获取http协议body中的数据. re ...

  2. 前后端通信中使用Ajax与后台接口api交互(以登录功能为例)

    一.查阅开发文档 首先,要做这个功能前,我们必须先查阅后台接口文档,了解使用登录接口时,需要提交哪些参数,并且接口使用返回的数据. 这里我使用了一个返回json格式数据的登录接口为例,讲解怎么使用Aj ...

  3. [数据库]Oracle和mysql中的分页总结

    Mysql中的分页 物理分页 •在sql查询时,从数据库只检索分页需要的数据 •通常不同的数据库有着不同的物理分页语句 •mysql物理分页,采用limit关键字 •例如:检索11-20条 selec ...

  4. thinkjs学习-this.assign传递数据和ajax调用后台接口

    在页面加载时,就需要显示在页面上的数据,可以在后台使用this.assign赋值,在前台通过ejs等模板获取:用户点击按钮,或者触发某些事件和后台进行交互时,就需要用到ajax调用后台接口.本文通过一 ...

  5. 我的第一个python web开发框架(39)——后台接口权限访问控制处理

    前面的菜单.部门.职位与管理员管理功能完成后,接下来要处理的是将它们关联起来,根据职位管理中选定的权限控制菜单显示以及页面数据的访问和操作. 那么要怎么改造呢?我们可以通过用户的操作步骤来一步步进行处 ...

  6. 通过使用Web Workers,Web应用程序可以在独立于主线程的后台线程中,运行一个脚本操作。这样做的好处是可以在独立线程中执行费时的处理任务,从而允许主线程(通常是UI线程)不会因此被阻塞/放慢。

    Web Workers API - Web API 接口参考 | MDNhttps://developer.mozilla.org/zh-CN/docs/Web/API/Web_Workers_API ...

  7. Swagger结合mustache模板生成后台接口代码、以及前后台建模代码

    之前项目中使用的的thrift来建模,维护前后台模型以及rest接口,前台使用的是angular2: 但是使用thrift只能生成建模,后台的rest接口的Controller文件还是需要手动去写,一 ...

  8. node作为中间层 —> 跨域请求java后台接口(使用http-proxy-middleware中间件)

    情景:利用node的express 作为中间层,跨域调取java后台接口,由于java接口对session有判断,因此每次请求都必须在req的headers中需要带上cookie,否则接口报500错误 ...

  9. fetch 代替 XMLHttpRequest (json-server 模拟后台接口)

    一.fetch 是 XMLHttpRequest 的替代方案.说白了就是除了 ajax 获取后台数据之外也可以用fetch 来获取. 二.fetch 的支持性还不是很好.挂载于BOM中可以通过浏览器直 ...

随机推荐

  1. 一起学习在 Ubuntu 上授予和移除 sudo 权限

    如你所知,用户可以在 Ubuntu 系统上使用 sudo 权限执行任何管理任务.在 Linux 机器上创建新用户时,他们无法执行任何管理任务,直到你将其加入 sudo 组的成员.在这个简短的教程中,我 ...

  2. Install kubernetes without yum

    下载最新版本: https://github.com/kubernetes/kubernetes/releases 下载kubernetes.tar.gz即可 解压缩后到cluster目录下 执行ge ...

  3. 从实践出发:微服务布道师告诉你Spring Cloud与Spring Boot他如何选择

    背景 随着公司业务量的飞速发展,平台面临的挑战已经远远大于业务,需求量不断增加,技术人员数量增加,面临的复杂度也大大增加.在这个背景下,平台的技术架构也完成了从传统的单体应用到微服务化的演进. 系统架 ...

  4. 算法竞赛入门经典训练指南——UVA 11300 preading the Wealth

    A Communist regime is trying to redistribute wealth in a village. They have have decided to sit ever ...

  5. SpringMVC之JSON交互

    #什么是json? json是一种用于储存数据格式,是js脚本语言的子集. #json的作用? 它可以传递对象.数组等数据结构.如果是单个数据,则要用数组,不用对象,因为对象都是键值对的 方式去存储, ...

  6. php开启xdebug扩展

    1.下载Xdebug(先看php下的ext文件夹(C:\xampp\php\ext)下有没有php_xdebug.dll文件,如果有的话,就不用下了.) 到目前为止,Xdebug的最新版本为2.7.0 ...

  7. 给PXC集群加密

    MySQL的复制时明文的,不管是集群的复制还是IST/SST,直接通过抓包就可以抓取数据. 生成证书 直接使用 mysql_ssl_rsa_setup mysql_ssl_rsa_setup --da ...

  8. MySQL 常用使用语句

    1)批量删除表 Select CONCAT( 'drop table ', table_name, ';' ) FROM information_schema.tables Where table_n ...

  9. Summarization of Tech Interviews

    Summarization of Tech Interviews(技术面试总结) 手心网(2015) Q1. 解释一下 TCP/IP 协议之滑动窗口? 滑动窗口协议的维基:https://en.wik ...

  10. DataSnap下的分包获取

    DataSnap下通过TQuery—TDataSetProvider—TClientDataSet获取数据,如果是主从数据,则每条主表记录都会触发从表数据的获取. 这种获取和组织数据的方式有一个问题: ...