MyBatis使用PageHelper分页插件

ops/2024/10/21 7:29:59/

1、不使用PageHelper分页插件

模块名:mybatis-012-page

CarMapper接口package org.example.mapper;import org.apache.ibatis.annotations.Param;
import org.example.pojo.Car;import java.util.List;public interface CarMapper {/*** 分页查询* @param startIndex 起始下标* @param pageSize 每页显示的记录条数* @return*/List<Car> selectByPage(@Param("startIndex") int startIndex,@Param("pageSize") int pageSize);
}
CarMapper.xml<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!--要想使用接口代理机制:sql映射文件中mapper标签的namespace必须是Mapper接口的全限定名,sql语句的id值也必须是dao接口的方法名-->
<mapper namespace="org.example.mapper.CarMapper"><select id="selectByPage" resultType="Car">select * from t_car limit #{startIndex},#{pageSize}</select>
</mapper>
PageTest.javaimport org.apache.ibatis.session.SqlSession;
import org.example.mapper.CarMapper;
import org.example.pojo.Car;
import org.example.utils.SqlSessionUtil;
import org.junit.Test;import java.util.List;public class TestCarMapper {@Testpublic void testSelectByPage(){//获取每页显示的记录条数int pageSize = 3;//显示第几页int pageNum = 2;//计算开始下标int startIndex = (pageNum - 1) * pageSize;SqlSession sqlSession = SqlSessionUtil.openSession();CarMapper mapper = sqlSession.getMapper(CarMapper.class);List<Car> cars = mapper.selectByPage(startIndex,pageSize);cars.forEach(car -> System.out.println(car));sqlSession.close();}
}

2、使用Mybatis的PageHelper分页插件

  • 使用PageHelper插件进行分页,更加的便捷。

  • 使用了pageHelper插件后select语句中的limit子句就不用写了

2.1 导入分页插件jar包

方式一:导入jar包

方式二:引入maven依赖

<!-- PageHelper -->
<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.1.10</version>
</dependency>

2.2 在核心配置文件中配置分页插件

2.2.1 在MyBatis全局配置文件中配置分页拦截器插件

在typeAliases标签下面同级进行配置:

    <!-- 分页插件 --><plugins><!--interceptor属性:配置PageHelper插件中的核心拦截器类。PageInterceptor分页拦截器类(类似于JavaWeb阶段的过滤器):该拦截器的作用是在 执行查询SQL语句 之前,将编写的SQL语句加上分页查询语句。--><plugin interceptor="com.github.pagehelper.PageInterceptor"><property name="reasonable" value="true"/></plugin></plugins>

2.2.2 配置插件属性

    <!-- 分页插件 --><plugins><plugin interceptor="com.github.pagehelper.PageInterceptor"><!-- 开启合理化分页--><property name="reasonable" value="true"/></plugin></plugins>

2.3 在程序中的使用

2.3.1 实体类

package org.example.utils;public class Emp {private Integer empno;private String ename;private String job;private Integer mgr;private Date hiredate;private Double sal;private Double comm;private Integer deptno;public Integer getEmpno() {return empno;}public void setEmpno(Integer empno) {this.empno = empno;}public String getEname() {return ename;}public void setEname(String ename) {this.ename = ename;}public String getJob() {return job;}public void setJob(String job) {this.job = job;}public Integer getMgr() {return mgr;}public void setMgr(Integer mgr) {this.mgr = mgr;}public Date getHiredate() {return hiredate;}public void setHiredate(Date hiredate) {this.hiredate = hiredate;}public Double getSal() {return sal;}public void setSal(Double sal) {this.sal = sal;}public Double getComm() {return comm;}public void setComm(Double comm) {this.comm = comm;}public Integer getDeptno() {return deptno;}public void setDeptno(Integer deptno) {this.deptno = deptno;}@Overridepublic String toString() {return "Emp{" + "empno=" + empno +", ename='" + ename + '\'' +", job='" + job + '\'' +", mgr=" + mgr +", hiredate=" + hiredate +", sal=" + sal +", comm=" + comm +", deptno=" + deptno +'}';}
}

2.3.2 mapper接口

    /*Mapper层:分页查询的方法,不需要定义分页查询的参数和sql,因为分页插件会自动添加分页sql和参数*/
public interface EmpMapper {List<Emp> selectByPage();
}

2.3.3 mapper文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.gs.mapper.EmpMapper"><!-- 使用PageHelper插件实现分页,SQL语句无需编写任何和分页相关的内容 --><select id="selectByPage" resultType="com.gs.entity.Emp">select empno,ename,job,mgr,hiredate,sal,comm,deptnofrom emporder by empno</select>
</mapper>

2.2.4 测试

关键点:

  • 在DQL查询语句之前开启分页功能,并设置分页的基本属性。

  • 在查询语句之后创建分页信息对象PageInfo,pageInfo对象是PageHelper插件提供的,用来封装 分页查询到的数据,在这个对象中封装了分页相关的信息。(PageInfo对象将来会存储到request域当中。在页面上展示。

public class PageHelperTest {@Testpublic void testPageHelper() {SqlSession sqlSession = MybatisUtil.getSession();EmpMapper empMapper = sqlSession.getMapper(EmpMapper.class);//在执行DQL语句之前开启分页功能://PageHelper.startPage(pageNum,pageSize);传入页码和每页的记录条数进行分页PageHelper.startPage(1, 5);List<Emp> empList = empMapper.selectByPage();for (Emp emp : empList) {System.out.println(emp);}//创建分页信息对象PageInfo<Emp> pageInfo = new PageInfo<>(empList);System.out.println("当前页数:" + pageInfo.getPageNum());System.out.println("每页条数:" + pageInfo.getPageSize());System.out.println("总记录数:" + pageInfo.getTotal());System.out.println("总页数:" + pageInfo.getPages());System.out.println("上一页:" + pageInfo.getPrePage());System.out.println("下一页:" + pageInfo.getNextPage());System.out.println("是否有上一页:" + pageInfo.isHasPreviousPage());System.out.println("是否有下一页:" + pageInfo.isHasNextPage());System.out.println("是否为首页:" + pageInfo.isIsFirstPage());System.out.println("是否为末页:" + pageInfo.isIsLastPage());System.out.println("存放页码的数据:" +Arrays.toString(pageInfo.getNavigatepageNums()));System.out.println("获取当前页数据:" + pageInfo.getList());sqlSession.close();}
}


http://www.ppmy.cn/ops/4862.html

相关文章

Gitee和Git学习笔记

Gitee和Git指令 Gitee提交代码方法1 先将仓库clone到本地&#xff0c;修改后再push到 Gitee 的仓库方法2 本地初始化一个仓库&#xff0c;设置远程仓库地址后再做push 切换分支下载代码通过git clone克隆仓库通过下载 ZIP 的方式下载代码 Git提交指令 解决本地库同时关联GitHub…

【C语言__结构体__复习篇5】

目录 前言 一、结构体基础知识 1.1 结构体的语法形式 1.2 创建结构体变量 1.3 结构体变量的初始化 1.4 点(.)操作符和箭头(->)操作符 二、匿名结构体 三、结构体自引用 四、结构体内存对齐 4.1 内存对齐的规则 4.2 出现结构体内存对齐的原因 4.3 修改默认对齐数 五、结…

DBA面试总结(Oracle篇)

一、备份恢复 1. RMAN备份是一种用于备份和恢复数据库文件归档日志和控制文件的工具软件&#xff0c;主要执行的是物理备份&#xff0c;可以执行完全或不完全的数据库恢复。既能支持热备&#xff0c;在归档模式下&#xff0c;RMAN可以执行在线备份。在非归档模式下&#xff0c…

记录flume运行时报NullPointerException异常

【背景说明】 我要起一个将kafka上的topic_log主题中的数据上传到hdfs上的flume进程。 这是我的flume配置文件脚本&#xff1a; #定义组件 a1.sourcesr1 a1.channelsc1 a1.sinksk1#配置source1 a1.sources.r1.type org.apache.flume.source.kafka.KafkaSource a1.sources.r…

新兴存内计算芯片架构、大型语言模型、多位存内计算架构——存内计算架构的性能仿真与对比分析探讨

CSDN存内社区招募&#xff1a;https://bbs.csdn.net/forums/computinginmemory? 首个存内计算开发者社区&#xff0c;现0门槛新人加入&#xff0c;发文享积分兑超值礼品&#xff1b; 存内计算先锋/大使在社区投稿&#xff0c;可获得双倍积分&#xff0c;以及社区精选流量推送…

项目管理利器 Git

一、序言 今天聊聊 Git。 二、开发的问题 在开发项目时&#xff0c;我们的代码都是直接放在本地的机器上的。如果本地机器出现了问题&#xff0c;怎么办&#xff1f;在企业中&#xff0c;开发项目都是团队协作&#xff0c;一个团队共同维护一个项目该如何处理&#xff1f;团…

HTML快速入门

HTML简介 HTML&#xff08;超文本标记语言&#xff09;是一种用于创建网页和Web应用程序的标记语言。它由一系列标签组成&#xff0c;每个标签通过尖括号来定义&#xff0c;并用于标记文本、图像、链接和其他内容。HTML标签描述了网页中的信息结构和布局&#xff0c;并定义了文…

Linux中进程和计划任务

一.程序 1.什么是程序 &#xff08;1&#xff09;是一组计算机能识别和执行的指令&#xff0c;运行于电子计算机上&#xff0c;满足人们某种需求的信息化工具 &#xff08;2&#xff09;用于描述进程要完成的功能&#xff0c;是控制进程执行的指令集 二.进程 1.什么是进程…