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. django 数据库html显示

    template {% autoescape off %} {% for each in obj %} <h2>{{ each.food }}</h2> <br/> ...

  2. php 采集爬取单个淘宝商品描述,商品属性

    下载链接:https://download.csdn.net/download/a724008158/10723448 效果图:

  3. redis 缓存锁的实现方法

    1. redis加锁分类 redis能用的的加锁命令分表是INCR.SETNX.SET 2. 第一种锁命令INCR 这种加锁的思路是, key 不存在,那么 key 的值会先被初始化为 0 ,然后再执 ...

  4. WEB后台认证机制

    mark to :http://www.cnblogs.com/xiekeli/p/5607107.html HTTP Basic Auth HTTP Basic Auth简单点说明就是每次请求API ...

  5. sql xml 入门 (二)

    DECLARE @myDoc xml --http://www.paymob.cn --话费充值api,充值api,话费充值接口,手机话费充值,车贝手机,贝萌手机,移动话费充值,联通话费充值,电信话费 ...

  6. 在C#中使用OpenCV(使用OpenCVSharp)

    在C#中使用OpenCV(使用OpenCVSharp) 1.什么是OpenCVSharp       为了解决在Csharp下编写OpenCV程序的问题,我做过比较深入的研究,并且实现了高效可用的方法 ...

  7. python --- 25 模块和包

    一.模块 1.导入方式 自己创建的模块名称 切不可和 内置模块的一样 ①  import  模块 ②  import 模块 as  名      设置在此空间的名称 ③  from 模块 import ...

  8. 如何在servlet中获取spring创建的bean

    package com.yxf.controller; import java.io.IOException; import javax.servlet.ServletException; impor ...

  9. yum仓库中源的配置与使用

    yum 主要功能是更方便的添加/删除/更新RPM 包,自动解决包的倚赖性问题,便于管理大量系统的更新问题. yum 可以同时配置多个资源库(Repository),简洁的配置文件(/etc/yum.c ...

  10. Oracle面试相关

    存储过程: https://www.cnblogs.com/taiguyiba/p/7809310.html https://www.cnblogs.com/lideng/p/3427822.html ...