• 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

     

     

  • 相关阅读:
    「AtCoder AGC023F」01 on Tree
    「Wallace 笔记」平面最近点对 解法汇总
    「Codeforces 1181E」A Story of One Country (Easy & Hard)
    「NOI2018」「LOJ #2720」「Luogu P4770」 你的名字
    IdentityServer4设置RefreshTokenExpiration=Sliding不生效的原因
    【知识点】IQueryable.SumAsync方法的NULL异常
    Beyond Compare 4 密钥被吊销
    【知识点】Uri对象的完整地址
    git文件夹大小写问题
    .Net Core学习资料
  • 原文地址:https://www.cnblogs.com/qianjinyan/p/10357485.html
Copyright © 2020-2023  润新知