【MyBatis】第十篇:mybatis的分页插件---pageHelper

news2024/11/17 17:31:40

分页无论是那个开发都是常见的使用场景,当然对于分页需要如果自己写的,不过自己写的话可能会需要想到很多:

比如:通过查询sql判断有多少数据,在页面显示共有多少页面。然后每页返回的数据是多少,上一页以及下一页如果到第一页和最后一页后是否起效等等。

这个就有一个mybatis的分页插件pageHelper,其本质就是mybatis拦截器的一个应用,实现分页查询。

如果需要深入了解可以看一下:官网

还是老规矩进行演示吧,文字解说不如直接用例子演示:

第一步

这个需要两步,分布需要配置依赖和插件。

这个配置在pox.xml配置文件中

<!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper -->
<!-- 配置依赖环境 --> 
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>5.2.0</version>
</dependency>

这个需要配置在mybatis-config.xml.毕竟这个是mybatis的适配插件,所以需要配置在mybatis的核心配置文件中。

<!-- 设置分页的插件 --> 
<plugin interceptor="com.github.pagehelper.PageInterceptor">
 
 </plugin>

第二步

体验插件工具其它的配置就不再多说直接使用逆向工程的配置环境,不重写搭建了 不然篇幅又变得很长而琐碎了。传送阵

首先使用一个非分页的查询吗,可以查询出所有的数据:

 @Test
    public void test(){
        try {
            //         通过IO操作配置文件  所以说这个配置文件可以改名字,一般默认是mybatis-config.xml
            InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
//        SqlSession类似与jdb中connection,但是其通过SqlSession工厂而创建的,而这个工厂却是通过工厂的构造类SqlSessionFactoryBuilder得到工厂
            SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
//        返回SqlSessionFactory
            SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
//        得到SqlSession
            SqlSession sqlSession = sqlSessionFactory.openSession(true);
//        这个通过代理模式,传入什么类返回什么类
            StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);

            StudentExample studentExample=new StudentExample();
            List<Student> studentList= studentMapper.selectByExample(studentExample);
            studentList.forEach(System.err::println);
            sqlSession.commit();

        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

在这里插入图片描述

这个时候没有启动分页插件,其实插件的使用有点像是javaweb中的过滤器一样,在请求数据的时候会先通过插件所带的方法。如下写:

  @Test
    public void test(){
        try {
            //         通过IO操作配置文件  所以说这个配置文件可以改名字,一般默认是mybatis-config.xml
            InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
//        SqlSession类似与jdb中connection,但是其通过SqlSession工厂而创建的,而这个工厂却是通过工厂的构造类SqlSessionFactoryBuilder得到工厂
            SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
//        返回SqlSessionFactory
            SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
//        得到SqlSession
            SqlSession sqlSession = sqlSessionFactory.openSession(true);
//        这个通过代理模式,传入什么类返回什么类
            StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
            StudentExample studentExample=new StudentExample();
//            这里开启分页
            PageHelper.startPage(1,2);
            List<Student> studentList= studentMapper.selectByExample(studentExample);
            studentList.forEach(System.err::println);
            sqlSession.commit();

        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

在这里插入图片描述

可见直接这样写,返回的数据数据第一页,分页数据为2条。

然后打印出数据:

            Page<Object> page = PageHelper.startPage(1,2);
            List<Student> studentList= studentMapper.selectByExample(studentExample);
            studentList.forEach(System.err::println);
//            得到所有的班级数据
            System.err.println(page);

看一下page内容是:

Page{count=true, pageNum=1, pageSize=2, startRow=0, endRow=2, total=6, pages=3, reasonable=false, pageSizeZero=false}[Student [Hash = 540325452, studentId=1, studentName=张三, studentAge=18, studentSex=男, gradeId=2, serialVersionUID=1], Student [Hash = 1976804832, studentId=2, studentName=赛貂蝉, studentAge=14, studentSex=女, gradeId=1, serialVersionUID=1]]

可见有具体的页数,以及总共有多少条数据,以及返回的当前页面的数据。

当然还有更加具体数据的对象PageInfo:

 @Test
    public void test(){
        try {
            //         通过IO操作配置文件  所以说这个配置文件可以改名字,一般默认是mybatis-config.xml
            InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
//        SqlSession类似与jdb中connection,但是其通过SqlSession工厂而创建的,而这个工厂却是通过工厂的构造类SqlSessionFactoryBuilder得到工厂
            SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
//        返回SqlSessionFactory
            SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
//        得到SqlSession
            SqlSession sqlSession = sqlSessionFactory.openSession(true);
//        这个通过代理模式,传入什么类返回什么类
            StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
            StudentExample studentExample=new StudentExample();
//            这里开启分页
            Page<Object> page = PageHelper.startPage(1,2);
            List<Student> studentList= studentMapper.selectByExample(studentExample);
            studentList.forEach(System.err::println);
//             在页面显示有多少也的参数 navigateLastPage
            PageInfo<Student> pageInfo= new PageInfo<>(studentList,4);
//            得到所有的班级数据
            System.err.println(pageInfo);
//            还可以添加条件

            sqlSession.commit();

        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

其PageInfo输出的如下

在这里插入图片描述

因为PageInfo有点不详细,调整其格式如下看:

在这里插入图片描述

现在说一下具体的意义:

  • pageNum:当前页的页码
  • pageSize:每页显示的条数
  • startRow / endRow : 这个是数据库返回的数据在本页是第几条到第几条,比如例子是第一页所以开始1,结束2.
  • size:当前页面显示的真实条数
  • total:总记录数
  • pages: 总页数
  • prePage / nextPage:上一页页码 / 下一页页码
  • isFirstPage / isLastPage : 是否是第一页 / 是否是最后一页
  • navigatePages : 设置的导航页数字 比如例子中是4 是通过 new PageInfo<>(studentList,4); 得到的
  • navigateFirstPage / navigateLastPage : 导航页第一页 / 最后一页 这里可以看出设置页数和真实数据还是有差异的
  • navigatepageNums :导航分页的页码

这些可以传递到页面,然后页面根据这些数据进行取出判断即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/353471.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Echarts 更改K线图颜色,解释K线图4个数字意义

第019个点击查看专栏目录本示例修改K线度的颜色&#xff0c;方法参考源代码。 这里面讲一下K线图的四个数字&#xff0c;如[20, 34, 10, 38], 第一位&#xff1a;20代表开盘价格&#xff0c; 第二位&#xff1a;34代表闭盘价格&#xff0c; 第三位&#xff1a;10代表最低价&…

buuctf Web 上

buuctf Web 1.[HCTF 2018]WarmUp[HCTF 2018]WarmUp 访问url http://e00c89a6-d7d6-4a78-a346-614edfb95738.node3.buuoj.cn/ 如下 打开靶场后&#xff0c;查看源码即可看到构造url访问获得index.php的源码 http://e00c89a6-d7d6-4a78-a346-614edfb95738.node3.buuoj.cn/in…

Typescript的原始据类型和Any类型

最新的ECMAScript标准定义了8中数据类型: 7种原始类型&#xff1a; BooleanNullUndefinedNumberBigintStringSymbol和 Object 除 Object 以外的所有类型都是不可变的 (值本身无法被改变》。例如&#xff0c;与C语言不同JavaScript 中字符串是不可变的 (译注: 如&#xff0c;Ja…

Unreal Engine05:UE4基本概念

写在前面 主要是介绍一下UE4中的一些常用概念。 参考的博客如下&#xff1a; UE4常用逻辑关系和说明&#xff1b;UE4入门学习4&#xff1a;C编程介绍&#xff1b;UE4中基础的类及其之间的关系&#xff1b;[官方] 虚幻引擎 4 术语&#xff1b;《图解UE4渲染体系》Part 0 引擎基…

记录robosense RS-LIDAR-16使用过程5

本篇记录RS-LIDAR-16录制bag包&#xff0c;并解析bag包为pcd。官网操作基本过了一遍&#xff0c;接下来记录标定。相机、雷达设备在出厂前通常都完成了内参标定工作&#xff0c;若要联合使用多雷达或雷达-相机时&#xff0c;就需要进行外参标定。接下来学习并记录标定。首先找到…

扬帆优配|杠杆资金重仓股曝光,3只科创板股获多路资金青睐

到2月16日&#xff0c;科创板融资余额环比前一日削减1104.16万元&#xff0c;其间&#xff0c;23股融资余额环比添加超千万元&#xff0c;融资净买入居前的有晶科动力、诺诚健华、爱博医疗等。 到2月16日&#xff0c;市场融资余额算计1.48万亿元&#xff0c;较前一交易日削减27…

frp实现内网穿透

文章目录一&#xff1a; frp是什么二&#xff1a; 程序文件结构三、使用步骤四&#xff1a;总结一&#xff1a; frp是什么 frp 是一个专注于内网穿透的高性能的反向代理应用&#xff0c;支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网…

如何使用ArcGIS进行地理配准

1.概述 对于GIS数据而言&#xff0c;坐标信息是灵魂&#xff0c;有了坐标信息之后才能和别的数据结合使用&#xff0c;之前有介绍过矢量数据定义坐标信息的方法&#xff0c;针对栅格图&#xff0c;这里为大家介绍一下通过地理配准增加坐标信息的方法&#xff0c;希望能对你有所…

深圳“托育”放大招!政府出钱帮你带娃啦!

工作忙得不可开交 难以照料孩子的起居 这个带娃难题常常让双职工家庭 感觉到头疼不已 一边是工作&#xff0c;一边是孩子 父母都上班&#xff0c;宝宝谁来带&#xff1f; 未来这个问题将迎刃而解&#xff01; 因为政府要出钱帮你带娃啦&#xff01; 近日&#xff0c;深圳市总工…

Computer Graphics From Scratch - Chapter 8

系列文章目录 简介&#xff1a;Computer Graphics From Scratch-《从零开始的计算机图形学》简介 第一章: Computer Graphics From Scratch - Chapter 1 介绍性概念 第二章&#xff1a;Computer Graphics From Scratch - Chapter 2 基本光线追踪 第三章&#xff1a;Computer Gr…

ts基础入门学习之上篇

1.安装typescript编译器 npm i -g typescript 安装之后使用tsc运行ts文件&#xff0c;然后会编译出对应的js文件&#xff0c;再通过node运行js文件&#xff0c;就能获得打印内容。 ts定义内容 function fn(people, date) {console.log(hello${people},today is ${date}); } fn…

C++模板(一)

文章目录C模板&#xff08;一&#xff09;1. 泛型编程2. 函数模板2.1 函数模板格式2.2 模板原理2.3 模板实例化2.4 模板参数匹配原则3. 类模板3.1 类模板格式3.2 背景3.3 类模板的实例化C模板&#xff08;一&#xff09; 1. 泛型编程 前面我们学到了函数重载这个特性&#xf…

Zabbix“专家坐诊”第181期问答汇总

题一 Q&#xff1a;大佬们&#xff0c;有没有基础的 监控模板 触发器分享下&#xff1f; A&#xff1a;你可以试一下乐维免费版&#xff08;https://forum.lwops.cn/download &#xff09;&#xff0c;里面基本的模板全齐。 问题二 Q &#xff1a;orabbix监控查询SQL执行时…

如何保证数据库和缓存双写一致性?

前言 数据库和缓存&#xff08;比如&#xff1a;redis&#xff09;双写数据一致性问题&#xff0c;是一个跟开发语言无关的公共问题。尤其在高并发的场景下&#xff0c;这个问题变得更加严重。 我很负责的告诉大家&#xff0c;该问题无论在面试&#xff0c;还是工作中遇到的概率…

CAD中怎么旋转光标?CAD旋转光标的方法步骤

CAD中怎么旋转光标&#xff1f;浩辰CAD软件作为一款拥有自主核心技术的CAD平台软件产品&#xff0c;提供了CAD旋转光标命令&#xff0c;本节课程就和小编一起来了解一下浩辰CAD软件中CAD旋转光标的方法步骤吧&#xff01; CAD旋转光标命令启动方式&#xff1a; 1、命令行&…

Redis第三讲

目录 三、Redis03 3.1 Redis持久化之RDB 3.1.1 什么是RDB 3.1.2 备份是如何执行的 3.1.3 Fork 3.1.4 RDB持久化流程 3.1.5 dump.rdb文件 3.1.6 配置rdb文件生成位置 3.1.7 如何触发RDB快照以及保持策略 3.2 Redis持久化之AOF 3.2.1 什么是AOF 3.2.2 AOF持久化流程 …

Java反序列化漏洞——CommonsCollections3链分析

一、原理CC1链中我们是通过调用Runtime.getRuntime.exec()来执行系统命令&#xff0c;而另一个方向我们可以通过TemplatesImpl加载字节码的类&#xff0c;通过调⽤其newTransformer() 方法&#xff0c;即可执⾏这段字节码的类构造器&#xff0c;我们在类构造器中加入恶意代码&a…

【Seata】_01 分布式事务基础知识和常见的解决方案

本地事务 单一的数据库事务&#xff0c;ACID由数据库直接提供 分布式事务 一个服务调用操作两个数据库&#xff1b; 多个服务操作同一个数据库&#xff1b; 多个服务操作多个数据库&#xff1b; 分布式事务无法由数据库保证 Seata 分布式事务解决方案 Seata提供AT/TCC/SAG…

HDMI Audio InfoFrame

Audio InfoFrame 是HDMI Source向Sink传递当前音频流特性的一种InfoFrame。要求是至少每两帧图像就要传输一次Audio InfoFrame。Audio InfoFrame的传输可以是Data Island周期的任何时刻。 HDMI在音频的传输上&#xff0c;packet包的标准是按照IEC60958或者IEC61938来的。 Aud…

使用契约测试得不偿失?试试契约先行开发

契约维护的难题 如今微服务凭借其灵活、易开发、易扩展等优势深入人心&#xff0c;不同服务之间的集成和交互日渐繁多且复杂。这些服务之间交互的方式是多样的&#xff0c;常见的有 HTTP 请求和消息队列。在它们交互的过程中&#xff0c;会有服务的版本演进&#xff0c;交互信…