11.MyBatis实现分页

文章详细介绍了如何利用MyBatis配合PageHelper分页插件来实现数据库查询的分页功能。通过设置PageHelper.startPage方法开启分页,然后进行查询操作,最后使用PageInfo对象获取并展示分页信息,如当前页、每页条数、总记录数、总页数等。
摘要由CSDN通过智能技术生成

MyBatis实现分页

数据库sql语句:limit index,pageSize

  • pageNum:当前页码
  • pageSize:每页显示的条数
  • index:当前页的起始索引
    • index=(pageNum-1)*pageSize
  • count:总记录数
  • totalPage:总页数
    • totalPage = (count%pageSize==0)?(count/pageSize):(count/pageSize+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 下一页 末页

这里显示第四页的数据,对应的navigatePages为5

分页插件

添加依赖

pom.xml

<!--分页插件-->
<dependency>
	<groupId>com.github.pagehelper</groupId>
	<artifactId>pagehelper</artifactId>
	<version>5.2.0</version>
</dependency>

配置分页插件

mybatis-config.xml

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

(放在<typeAliases>后面)

使用分页功能

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

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

在查询获取list集合之后,使用PageInfo pageInfo = new PageInfo<>(List list, int navigatePages)获取分页相关数据(navigatePages:导航页面,在首页和尾页之间显示的页码数)

  • list:分页之后的数据
  • navigatePages:导航分页的页码数

分页相关的数据

PageInfo{pageNum=3, pageSize=2, size=2, startRow=5, endRow=6, total=8, pages=4, list=Page{count=true, pageNum=3, pageSize=2, startRow=4, endRow=6, total=8, pages=4, reasonable=false, pageSizeZero=false}[Emp2{empId=6, empName=‘yuxinxuan’, gender=‘男’, deptId=10}, Emp2{empId=7, empName=‘yxx’, gender=‘男’, deptId=10}], prePage=2, nextPage=4, isFirstPage=false, isLastPage=false, hasPreviousPage=true, hasNextPage=true, navigatePages=3, navigateFirstPage=2, navigateLastPage=4, navigatepageNums=[2, 3, 4]}

  • pageNum:当前页的页码
  • pageSize:每页显示的条数
  • size:当前页显示的真实条数
  • total:总记录数
  • pages:总页数
  • prePage:上一页的页码
  • nextPage:下一页的页码
  • isFirstPage/isLastPage:是否为第一页/最后一页
  • hasPreviousPage/hasNextPage:是否存在上一页/下一页
  • navigatePages:导航分页的页码数
  • navigatepageNums:导航分页的页码,[2, 3, 4]

MyBatisTest.java

    @Test
    public void testPage(){
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        Emp2Mapper emp2Mapper = sqlSession.getMapper(Emp2Mapper.class);
        //开启分页设置pageNum(当前页码)为3,pageSize(每页条数)为2,自此开始到PageInfo后面的查询语句都会受到影响
        Page<Object> page = PageHelper.startPage(3,2);

        //设置查询条件
        Emp2Example emp2Example = new Emp2Example();
        emp2Example.createCriteria().andEmpNameLike("%y%");
        //会在查询条件的基础上添加limit语句实现分页功能
        List<Emp2> emp2List = emp2Mapper.selectByExample(emp2Example);
        //pageInfo会保存分页相关的所有数据,可以通过调用其中的数据获取分页相关的数据(包含pager数据)
        PageInfo<Emp2> pageInfo = new PageInfo<>(emp2List,3);//设置navigatePages为3
        System.out.println(pageInfo);

        //实现分页功能后page会保存当前页的所有数据在里面
        System.out.println(page);
    }
DEBUG 01-15 17:34:48,212 Cache Hit Ratio [SQL_CACHE]: 0.0 (LoggingCache.java:60) 
DEBUG 01-15 17:34:48,275 ==>  Preparing: SELECT count(0) FROM t_emp WHERE (emp_name LIKE ?) (BaseJdbcLogger.java:137) 
DEBUG 01-15 17:34:48,306 ==> Parameters: %y%(String) (BaseJdbcLogger.java:137) 
DEBUG 01-15 17:34:48,353 <==      Total: 1 (BaseJdbcLogger.java:137) 
DEBUG 01-15 17:34:48,353 ==>  Preparing: select emp_id, emp_name, gender, dept_id from t_emp WHERE ( emp_name like ? ) LIMIT ?, ? (BaseJdbcLogger.java:137) 
DEBUG 01-15 17:34:48,353 ==> Parameters: %y%(String), 4(Long), 2(Integer) (BaseJdbcLogger.java:137) 
DEBUG 01-15 17:34:48,353 <==      Total: 2 (BaseJdbcLogger.java:137) 
PageInfo{pageNum=3, pageSize=2, size=2, startRow=5, endRow=6, total=8, pages=4, list=Page{count=true, pageNum=3, pageSize=2, startRow=4, endRow=6, total=8, pages=4, reasonable=false, pageSizeZero=false}[Emp2{empId=6, empName='yuxinxuan', gender='男', deptId=10}, Emp2{empId=7, empName='yxx', gender='男', deptId=10}], prePage=2, nextPage=4, isFirstPage=false, isLastPage=false, hasPreviousPage=true, hasNextPage=true, navigatePages=3, navigateFirstPage=2, navigateLastPage=4, navigatepageNums=[2, 3, 4]}
Page{count=true, pageNum=3, pageSize=2, startRow=4, endRow=6, total=8, pages=4, reasonable=false, pageSizeZero=false}[Emp2{empId=6, empName='yuxinxuan', gender='男', deptId=10}, Emp2{empId=7, empName='yxx', gender='男', deptId=10}]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值