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

 

 

原文地址:https://www.cnblogs.com/qianjinyan/p/10357485.html

时间: 2024-10-16 00:26:41

jdbcTemplate 后台接口中的分页的相关文章

根据后台接口中的关键字字段,搜索匹配的页面内容

后台接口的关键字字段是  searchMessage template // 通过v-model 绑定value,通过@click 绑定点击事件 <div> <input type="text" v-model="value" placeholder="根据商家店名关键字搜索"> <button @click='clickSearch'>搜索</button> </div> script

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

在<vue-cli搭建的项目中增加后台mock接口>中实现了后台mock,但是前端post的t数据都要在mock的后台接口中使用req的接收数据事件获取http协议body中的数据. req.on('data', function(chunk){ //接收字节数据 }); req.end('data', function(){ //转换||处理 }); req.error('error', function(e){ //处理错误 }); 如果前端需要使用cookie,后端要读取,那么在后台mo

SpringMVC+easyUI中datagrid分页实现_2014.5.1

一.概述 SpringMVC: 1.是面对方法级变量的,在操作起来会比struts方便一些(structs是类级变量),具体体现在了srpingMVC的注解上面, 如@RequstMapping("/login"),而且对于返回值ModelAndView这也是一大亮点,既可以返回一个页面(View),再加上@ResponseBody注解以后就可以返回一个      模型对象(也就是一种数据结构). 2.对于方法级传入的参数操作起来也相当方便,比如本例中,在加载DataGrid时,会像后

app与php后台接口登录认证、验证(seesion和token)

简要:随着电商的不断发展,APP也层次不穷,随着科技的发展主要登录形式(微信.QQ.账号/密码):为此向大家分享一下"app与php后台接口登录认证.验证"想法和做法:希望能够帮助困惑的伙伴们,如果有不对或者好的建议告知下:*~*!  一.登录机制 粗略分析:登录可分为三个阶段(登录验证.登录持续.退出登录):登录验证指客户端提供账号/密码(或第三方平台(微信.qq)获取openid/unionid)向服务器提出登录请求,服务器应答请求判断能否登录并返回相应数据:登录持续指客户端登录后

干货运用resteasy整合web框架,同时将后台接口以js形式导出到前台

不多说先上 web.xml配置 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/jav

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

物理分页 •在sql查询时,从数据库只检索分页需要的数据 •通常不同的数据库有着不同的物理分页语句 •mysql物理分页,采用limit关键字 •例如:检索11-20条 select * from user limit 10,10 ; * 每次只查询10条记录.当点击下一页的时候,查询数据库,查询后10条. * 优点:如果数据量非常大,不会导致内存溢出. * 缺点:每次都与数据库进行交互. * 分页一般采用数据库的sql语句完成分页查询. * MYSQL分页:使用limit关键字. * Orac

IOS开发接口中出现&quot;\&quot;的问题

最近在项目开发中,由于后台接口有问题,出现了"\"这样的数据,按照一般开发中JSON数据读取的方式,会无法识别,因为在一般的语言中"\"都是转义,那么问题来了,怎么解决呢? 这个问题 困扰了我好久,首先我们来看一下,用BeJson来识别一下正常的JSON数据: 此时是正常的 JSON数据 ,现在 在数据中加一个“\” 再来看一下: 报错了! 其实 ,你如果用回车测试一下 ,也会有惊喜的: 是不是 也失败了呢? 这个问题,我有一种崩溃的感觉,除了使用第三方库,感觉,其

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

在页面加载时,就需要显示在页面上的数据,可以在后台使用this.assign赋值,在前台通过ejs等模板获取:用户点击按钮,或者触发某些事件和后台进行交互时,就需要用到ajax调用后台接口.本文通过一个例子讲述这两种方法的前后台实现.(方便起见,使用jQuery封装的ajax)' (ps:ajax调用后台接口的情形通常是用户触发事件,给后台传递一些前台的数据,然后后台根据这些数据进行相关操作,再返回前台一些数据.举个表单提交的例子,用户点击提交按钮之后,将填写的表单信息传递个后台,后台对传过来的

app的后台接口通讯方案

本文是参考网上资料,和结合自身的一些开发经验所写,不喜勿喷! 在app的后台设计中,一个很重要的因素是考虑通讯的安全性. 因此,我们需要考虑的要点有:1. 在app和后台,都不能保存任何用户密码的明文2. 在app和后台通讯的过程中,怎么保证用户信息的安全性 3,app的反编译处理 在app中,根据安全考虑,用户的操作分为两类: 1. 用户登录注册操作 2. 用户的其他操作   在第一点,用户登录注册操作中,是会出现用户密码,所以在这个过程中,必须要使用https通讯,保证通讯的安全.    在