MyBatis使⽤PageHelper(MySQL)

我的建议是直接看官方文档进行学习。



一、 limit分⻚

在这里插入图片描述

  • mysql的limit后⾯两个数字:

    • 第⼀个数字:startIndex(起始下标。下标从0开始。)
    • 第⼆个数字:pageSize(每⻚显示的记录条数)
  • 假设已知⻚码pageNum,还有每⻚显示的记录条数pageSize,startIndex = (pageNum - 1) * pageSize

  • 所以,标准通⽤的mysql分⻚SQL:

    select * from
    	tableName ......
    limit (pageNum - 1) * pageSize, pageSize
    
  • 在实际的开发中,一般由前端或者后端人员将 pageNum、pageSize 计算好后传递给 mybatis。

    <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插件

第⼀步:引⼊依赖

<dependency>
	<groupId>com.github.pagehelper</groupId>
	<artifactId>pagehelper</artifactId>
	<version>5.3.2</version>
</dependency>

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

  • typeAliases标签下⾯进⾏配置:

    <plugins>
    	<plugin interceptor="com.github.pagehelper.PageInterceptor"/>
    </plugins>
    

第三步:编写Java代码

  • 关键点:
    • 在查询语句之前开启分⻚功能。(只有紧跟在 PageHelper.startPage 方法后的第一个 Mybatis 的查询(Select)方法会被分页。)
    • 在查询语句之后封装PageInfo对象。(PageInfo对象将来会存储到 request 域当中。在⻚⾯上展示。)
    @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);
    }
    

第四步:格式化结果查看

  • 对于其中的属性都有对应的方法来获取,需要的时候查找即可。
  • 每个属性的含义可以在使用的时候上网查找。
    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:

    <dependency>
      <groupId>com.github.pagehelper</groupId>
      <artifactId>pagehelper-spring-boot-starter</artifactId>
      <version>2.1.0</version>
    </dependency>
    
  • use PageHelper:

    /**
     * 分页查询
     */
    @Override
    public PageResult pageQuery(EmployeePageQueryDTO employeePageQueryDTO) {
        //开启分页
        PageHelper.startPage(employeePageQueryDTO.getPage(), employeePageQueryDTO.getPageSize());
        //执行sql查询语句
        List<Employee> employees = employeeMapper.pageQuery(employeePageQueryDTO);
        //获取总的返回记录条数
        PageInfo<Employee> pageInfo = new PageInfo<>(employees);
        long total = pageInfo.getTotal();
        return new PageResult(total, employees);
    }
    

  • 32
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小宝945

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值