• 后端中使用分页的几种方法(建议收藏)


    直接使用mysql的limit进行分页

    前端会传来数据 pagepageSize
    表示第page页显示pageSize条数据
    因为我们是直接使用sql语句的,所以我们需要使参数满足limit语法
    所以以下进行一定的计算

    page=(page-1)*pageSize
    
    • 1

    然后在我们查询sql的最后加上limit语句即可

    select ......     limit #{page},#{pageSize}
    
    • 1

    插件Mybatis-PageHelper(拦截器原理)

    需要依赖

    <dependency>
        <groupId>com.github.pagehelper</groupId>
        <artifactId>pagehelper</artifactId>
        <version>5.1.2</version>
    </dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    另外如果是使用的springboot的话,可以引入这个依赖代替上面的。该依赖会自动加入mybatis的依赖

     
    <dependency>
           <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
             <version>1.2.10</version>      
    </dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    该插件可以先让我们在dao层查询出列表后,过滤后再进行分页
    第一步:设置分页

    //注意这里的page不需要进行计算,直接使用前端传过来的数据
    PageHelper.startPage(page,pageSize);
    
    • 1
    • 2

    第二步:从dao层获取list列表数据并自行过滤

    List<User> list=userDao.getUserByAge(int 
    age);
    ......
    
    • 1
    • 2
    • 3

    第三步:分页封装

    PageInfo<User> pageInfo=new PageInfo<>(list);
    
    • 1

    之后,pageInfo里面的属性就可以供我们使用了。具体可以使用的数据如下

      //当前页
        private int pageNum;
        //每页的数量
        private int pageSize;
        //当前页的数量
        private int size;
        //当前页面第一个元素在数据库中的行号
        private int startRow;
        //当前页面最后一个元素在数据库中的行号
        private int endRow;
        //总记录数
        private long total;
        //总页数
        private int pages;
        //结果集
        private List<T> list;
        //前一页
        private int prePage;
        //下一页
        private int nextPage;
        //是否为第一页
        private boolean isFirstPage = false;
        //是否为最后一页
        private boolean isLastPage = false;
        //是否有前一页
        private boolean hasPreviousPage = false;
        //是否有下一页
        private boolean hasNextPage = false;
        //导航页码数
        private int navigatePages;
        //所有导航页号
        private int[] navigatepageNums;
        //导航条上的第一页
        private int navigateFirstPage;
        //导航条上的最后一页
        private int navigateLastPage;
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    在service中对list进行拆分

    使用listapi进行分页

    int size = list.size();
    if (size % pageSize!= 0){
         size = size / 10 + 1;
         if(page == size){
               list = list.subList((page - 1) * pageSize,list.size());
                }else {
                    list = list.subList((page - 1) * pageSize,page * pageSize);
                }
                map.put("pages",size);
                map.put("current",page);
           }else {
                list = list.subList((page - 1) * pageSize,page * pageSize);
                map.put("current",page);
                map.put("pages",size);
           }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    MP官方插件

    首先需要导入mybatis-plus的依赖

    <dependency>
           <groupId>com.baomidou</groupId>
           <artifactId>mybatis-plus-generator</artifactId>
           <version>3.4.1</version>
    </dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在config包下添加一个MP的拦截器

    @Configuration
    public class MybatisPlusConfig {
        /*
         * 分页插件,自动识别数据库类型 多租户,请参考官网【插件扩展】
         */
        @Bean
        public PaginationInterceptor paginationInterceptor() {
            return new PaginationInterceptor();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    使用MP封装的查询API
    第一步:创建一个Page对象(不用进行计算,继续使用前端传过来的数据)

     IPage<User> userPage = new Page<>(page, pageSize);//参数一是当前页,参数二是每页个数
    
    • 1

    第二步:调用官方API

     userPage = userMapper.selectPage(userPage, null);
    
    • 1

    第三步:获取page中的数据

    List<User> list = userPage.getRecords();
    
    • 1

    在一个项目中使用数据库进行查询需要使用的几种依赖

    数据库驱动

    
    <dependency>
    	<groupId>mysql</groupId>
    	<artifactId>mysql-connector-java</artifactId>
    	<version>8.0.15</version>
    </dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    数据库连接池

     <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.10</version>
     </dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    maybatis和分页插件

    <dependency>
        <groupId>com.github.pagehelper</groupId>
        <artifactId>pagehelper-spring-boot-starter</artifactId>
        <version>1.2.10</version>
    </dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
  • 相关阅读:
    MHDNet
    html学习笔记
    【Linux】服务器间免登陆访问
    Debezium日常分享系列之:Debezium2.4版本之用于 MongoDB的Debezium 连接器
    Golang区块链钱包
    Vue2(十三):路由的使用及注意点、嵌套路由、路由的query和params参数、props配置
    Leetcode 02.07 链表相交(链表)
    【AntDesign】Docker部署
    GO环境变量配置
    扑克牌问题
  • 原文地址:https://blog.csdn.net/qq_56769991/article/details/125447487