MyBatis使⽤PageHelper(MySQL)

MyBatis使⽤PageHelper(MySQL)



一、 limit分⻚

  • mysql的limit后⾯两个数字:
    • 第⼀个数字:startIndex(起始下标。下标从0开始。)
    • 第⼆个数字:pageSize(每⻚显示的记录条数)
  • 假设已知⻚码pageNum,还有每⻚显示的记录条数pageSize,startIndex = (pageNum - 1) * pageSize
  • 所以,标准通⽤的mysql分⻚SQL:
xml 复制代码
select * from
 tableName ......
limit (pageNum - 1) * pageSize, pageSize
  • 在实际的开发中,一般由前端或者后端人员将 pageNum、pageSize 计算好后传递给 mybatis。
xml 复制代码
<select id="selectActivityByConditionForPage" parameterType="map" resultMap="BaseResultMap">
  select
      a.id,u1.name as owner,a.name,a.start_date,a.end_date,a.cost,a.description,a.create_time,u2.name as create_by,a.edit_time,u3.name as edit_by
  from
      tbl_activity a
  join
      tbl_user u1 on a.owner=u1.id
  join
      tbl_user u2 on a.create_by=u2.id
  left join
      tbl_user u3 on a.edit_by=u3.id
  <where>
    <if test="name!=null and name!=''">
      and a.name like '%' #{name} '%'
    </if>
    <if test="owner!=null and owner!=''">
      and u1.name like '%' #{owner} '%'
    </if>
    <if test="startDate!=null and startDate!=''">
      and a.start_date&gt;=#{startDate}
    </if>
    <if test="endDate!=null and endDate!=''">
      and a.end_date&lt;=#{endDate}
    </if>
  </where>
  order by a.create_time desc
  limit #{beginNo},#{pageSize}
</select>

二、PageHelper插件

第⼀步:引⼊依赖

xml 复制代码
<dependency>
	<groupId>com.github.pagehelper</groupId>
	<artifactId>pagehelper</artifactId>
	<version>5.3.2</version>
</dependency>

第⼆步:在mybatis-config.xml⽂件中配置插件

  • typeAliases标签下⾯进⾏配置:

    xml 复制代码
    <plugins>
    	<plugin interceptor="com.github.pagehelper.PageInterceptor"/>
    </plugins>

第三步:编写Java代码

  • 关键点:

    • 在查询语句之前开启分⻚功能。(只有紧跟在 PageHelper.startPage 方法后的第一个 Mybatis 的查询(Select)方法会被分页。)
    • 在查询语句之后封装PageInfo对象。(PageInfo对象将来会存储到 request 域当中。在⻚⾯上展示。)
    java 复制代码
    @Test
    public void testPageHelper() throws Exception{
    	SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));
    	SqlSession sqlSession = sqlSessionFactory.openSession();
    	CarMapper mapper = sqlSession.getMapper(CarMapper.class);
    	// 开启分⻚
    	PageHelper.startPage(2, 2);
    	// 执⾏查询语句
    	List<Car> cars = mapper.selectAll();
    	// 获取分⻚信息对象
    	PageInfo<Car> pageInfo = new PageInfo<>(cars, 5);
    	System.out.println(pageInfo);
    }

第四步:格式化结果查看

  • 对于其中的属性都有对应的方法来获取,需要的时候查找即可。
  • 每个属性的含义可以在使用的时候上网查找。
json 复制代码
PageInfo{
	pageNum=2, pageSize=2, size=2, startRow=3, endRow=4, total=6, pages=3,list=Page{count=true, pageNum=2, pageSize=2, startRow=2, endRow=4, total=6, pages=3, reasonable=false, pageSizeZero=false}
	[Car{id=86, carNum='1234', brand='丰⽥霸道', guidePrice=50.5, produceTime='2020-1011', carType='燃油⻋'},
	Car{id=87, carNum='1234', brand='丰⽥霸道', guidePrice=50.5, produceTime='2020-10-11', carType='燃油⻋'}],
	prePage=1, nextPage=3, isFirstPage=false, isLastPage=false, hasPreviousPage=true, hasNextPage=true,navigatePages=5, navigateFirstPage=1, navigateLastPage=3,navigatepageNums=[1, 2, 3]
}

三、SpringBoot3 集成 PageHelper 插件

  • Add the following dependency to your pom.xml:
xml 复制代码
<dependency>
  <groupId>com.github.pagehelper</groupId>
  <artifactId>pagehelper-spring-boot-starter</artifactId>
  <version>2.1.0</version>
</dependency>

相关推荐
爱写代码的阿森1 小时前
鸿蒙三方库 | harmony-utils之KvUtil键值型数据库操作详解
数据库·华为·harmonyos·鸿蒙·huawei
Database_Cool_2 小时前
单机 MySQL 迁移到分布式数据库方便吗?阿里云 PolarDB-X 100% MySQL 协议兼容零改造平滑迁移
数据库·分布式·mysql
姜太小白3 小时前
【MySQL】 索引优化实战:解决 WHERE 等值 + IS NULL 查询,TEXT 字段报错 1167 的完整指南
数据库·mysql
窝子面3 小时前
手搓最简前后端协作-node
javascript·数据库
吳所畏惧3 小时前
宝塔面板Redis密码修改指南:SSH命令修改 vs 面板UI界面修改,哪个更靠谱?
运维·服务器·数据库·redis·缓存·ssh
DFT计算杂谈3 小时前
无 Root 权限在 Tesla K80 零门槛部署 DeepSeek 大模型
linux·服务器·网络·数据库·机器学习
HPFBoy3 小时前
log4net 数据库存日志正确配置
数据库
liuxiaowei34 小时前
【绝版教程】新版MySQL DBA高级实战进阶班 MySQL8.0 姜承尧-腾讯数据库总监
数据库·mysql·dba
破碎的南瓜4 小时前
sqli--sql注入过关笔记(1,2,3,4,5,9)
数据库·笔记·sql