当前位置:   article > 正文

12、分页插件

分页插件


【尚硅谷】SSM框架全套教程-讲师:杨博超

失败,是正因你在距成功一步之遥的时候停住了脚步。

12、分页插件

PageHelper官网
官网文档

limit index,pageSize
pageSize:每页显示的条数
pageNum:当前页的页码
index:当前页的起始索引,index=(pageNum-1)*pageSize
count:总记录数
totalPage:总页数
totalPage = count / pageSize;
if(count % pageSize != 0){
totalPage += 1;
}
pageSize=4,pageNum=1,index=0 limit 0,4
pageSize=4,pageNum=3,index=8 limit 8,4
pageSize=4,pageNum=6,index=20 limit 8,4

首页 上一页 2 3 4 5 6 下一页 末页

12.1、使用步骤

1 添加依赖

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

2 配置分页插件

MyBatis 配置 xml 中配置拦截器插件

特别注意,新版拦截器是 com.github.pagehelper.PageInterceptor。

com.github.pagehelper.PageHelper 现在是一个特殊的 dialect 实现类,是分页插件的默认实现类,提供了和以前相同的用法。

<!--
    plugins在配置文件中的位置必须符合要求,否则会报错,顺序如下:
    properties?, settings?,
    typeAliases?, typeHandlers?,
    objectFactory?,objectWrapperFactory?,
    plugins?,
    environments?, databaseIdProvider?, mappers?
-->
<plugins>
    <!-- com.github.pagehelper为PageHelper类所在包名 -->
    <plugin interceptor="com.github.pagehelper.PageInterceptor">
	</plugin>
</plugins>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

3 使用:方式一

mapper.xml中的查询语句不用写LIMIT,分页插件会自动添加,只需要写正常查询就可以

例:select * from 表。即可

使用PageHelper

DynamicSQLMapper接口

// 查询全部员工
List<Emp> getEmp();
  • 1
  • 2

DynamicSQLMapper.xml

不要再sql语句结尾加;,加了会报错。

(org.apache.ibatis.exceptions.PersistenceException:)

(select emp_id, emp_name, age, gender, dept_id from t_emp; LIMIT ?)

<!--List<Emp> getEmp();-->
<select id="getEmp" resultType="emp">
    select emp_id, emp_name, age, gender, dept_id
    from t_emp
</select>
  • 1
  • 2
  • 3
  • 4
  • 5

测试

@Test
public void testLimit() {
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    DynamicSQLMapper mapper = sqlSession.getMapper(DynamicSQLMapper.class);
    //查询功能之前开启分页功能,告诉分页插件要显示第几页,每页显示多少条数据,返回值是Page对象,包含所有分页信息
    Page<Object> page = PageHelper.startPage(1, 4);
    List<Emp> list = mapper.getEmp();
    sqlSession.close();
    list.forEach(System.out::println);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

4 使用:方式二

new PageInfo<>

@Test
public void testLimit() {
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    DynamicSQLMapper mapper = sqlSession.getMapper(DynamicSQLMapper.class);
    // 1.在查询功能之前开启分页
    PageHelper.startPage(1, 4);
    // 查询功能
    List<Emp> list = mapper.getEmp();
    // 2.在查询功能之后获取分页相关信息
    PageInfo<Emp> page = new PageInfo<>(list,5);
    list.forEach(System.out::println);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

5 使用:方式三

在接口中传入分页数据

mapper接口对应的方法中添加pageNum,pageSize属性

List<Emp> getEmp(@Param("pageNum") int pageNum, @Param("pageSize") int pageSize);
  • 1

在mybatis配置文件或者spring配置文件中添加属性

name=“supportMethodsArguments” value=“true”

例:mybatis配置文件

<!--分页插件-->
<plugins>
    <!-- com.github.pagehelper为PageHelper类所在包名 -->
    <plugin interceptor="com.github.pagehelper.PageInterceptor">
        <!-- 使用下面的方式配置参数,后面会有所有的参数介绍 -->
        <property name="param1" value="value1"/>
        <!--自动分页-->
        <property name="supportMethodsArguments" value="true"/>
    </plugin>
</plugins>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

直接使用就可以,不需要在mapper方法执行前使用 PageHelper.startPage(1, 4);

12.2、分页插件的使用

1 PageHelper.startPage(int pageNum, int pageSize)

在查询功能之前使用PageHelper.startPage(int pageNum, int pageSize)开启分页功能

  • pageNum:当前页的页码
  • pageSize:每页显示的条数

2 new PageInfo<>(List list, intnavigatePages)

在查询获取list集合之后,使用PageInfo pageInfo = new PageInfo<>(List list, intnavigatePages)获取分页相关数据

  • list:分页数据
  • navigatePages:导航分页的数量

3 分页相关数据

PageInfo{
pageNum=8, pageSize=4, size=2, startRow=29, endRow=30, total=30, pages=8,
list=Page{count=true, pageNum=8, pageSize=4, startRow=28, endRow=32, total=30,
pages=8, reasonable=false, pageSizeZero=false},
prePage=7, nextPage=0, isFirstPage=false, isLastPage=true, hasPreviousPage=true,
hasNextPage=false, navigatePages=5, navigateFirstPage4, navigateLastPage8,
navigatepageNums=[4, 5, 6, 7, 8]
}
pageNum:当前页的页码
pageSize:每页显示的条数
size:当前页显示的真实条数
total:总记录数
pages:总页数
prePage:上一页的页码
nextPage:下一页的页码
isFirstPage/isLastPage:是否为第一页/最后一页
hasPreviousPage/hasNextPage:是否存在上一页/下一页
navigatePages:导航分页的页码数
navigatepageNums:导航分页的页码,[1,2,3,4,5]

12.3、使用Limit分页

SQL语法

# 语法
SELECT * from user limit startIndex,pageSize
SELECT * from user limit 3 #[0,n]
  • 1
  • 2
  • 3

使用Mybatis实现分页,核心SQL

1 Mapper接口

// 查询全部员工
List<Emp> getEmpLimit(@Param("startIndex") int startIndex, @Param("pageSize") int pageSize);
  • 1
  • 2

2 Mapper.xml

<!--分页-->
<!--List<Emp> getEmpLimit(@Param("startIndex") int startIndex, @Param("pageSize") int pageSize);-->
<select id="getEmpLimit" resultType="emp">
    select emp_id, emp_name, age, gender, dept_id
    from t_emp
    limit #{startIndex},#{pageSize};
</select>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

3 测试

@Test
public void testGetEmpLimit() {
    SqlSession sqlSession = MybatisUtil.getSqlSession();
    DynamicSQLMapper mapper = sqlSession.getMapper(DynamicSQLMapper.class);
    List<Emp> list = mapper.getEmpLimit(0, 4);
    sqlSession.close();
    list.forEach(System.out::println);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

12.4、RowBounds分页

不再使用SQL实现分页,使用java来实现分页

1 Mapper接口

// 查询全部员工
List<Emp> getEmpByRowBounds();
  • 1
  • 2

2 Mapper.xml

<!--List<Emp> getEmpByRowBounds();-->
<select id="getEmpByRowBounds" resultType="emp">
    select emp_id, emp_name, age, gender, dept_id
    from t_emp
</select>
  • 1
  • 2
  • 3
  • 4
  • 5

3 测试

@Test
public void testgetEmpByRowBounds() {
    SqlSession sqlSession = MybatisUtil.getSqlSession();
    // 实现RowBounds
    RowBounds rowBounds = new RowBounds(0, 4);
    // 通过java代码层面实现分页
    List<Emp> list = sqlSession.selectList("pers.tianyu.mapper.DynamicSQLMapper.getEmpByRowBounds", null, rowBounds);
    sqlSession.close();
    list.forEach(System.out::println);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/88055
推荐阅读
相关标签
  

闽ICP备14008679号