Mybatis使用PageHelper

1.limit分页

select 字段名 from 表名 limit startIndex , pageSize

  • 第一个数字: startIndex (起始下标。表示从数据库表中的第几条数据开始,数据库表中的第一条数据是从0开始)

  • 第二个数字:pageSize (每页显示的记录条数,就是每页显示多少条记录)

  • 页码 pageNum 是前端页面中的第几页

    • 假设已知页码 pageNum , 还有每页显示的记录条数 pageSize , 那么 startIndex 这个数字可以是自动获取的吗

    • startIndex = (pageNum - 1) * pageSize

1.1 mybatis不使用PageHelper做分页的查询

  • 数据库表如下

  • 数据库表对应的java类pojo

public class Car implements Serializable{
    private Long id;
    private String carNum;
    private String brand;
    private Double guidePrice;
    private String produceTime;
    private String carType;
  • Mysql标准通用的分页SQL语句

    SELECT 
        字段名 
    FROM
        表名 ......
    LIMIT
        (pageNum - 1)*pageSize ,pageSize
  • 首先我在mybatis核心配置文件配置了

    <settings>
         <!--开启驼峰命名自动映射,即从经典数据库列名 A_COLUMN 映射到经典 Java 属性名 aColumn。-->
         <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
  • CarMapper接口

    public interface CarMapper {
        /**
         * 通过分页查询的方式,获取Car列表
         * @param startIndex 从数据库表中的第几条数据开始 ,计算公式 : (pageNum - 1) * pageSize
         * @param pageSize 每页显示多少条数据
         * @return
         */
        List<Car> selectAllByPage(
                @Param("startIndex") Integer startIndex,
                @Param("pageSize") Integer pageSize
        );
    }
  • CarMapper.xml

    <mapper namespace="com.dongsheng.mybatis.mapper.CarMapper">
        <!--
            List<Car> selectAllByPage(
                @Param("startIndex") Integer startIndex,
                @Param("pageSize") Integer pageSize);
        -->
        <!-- 这里我不配置 resultMap ,因为我在mybatis核心配置文件中已经配置了开启驼峰命名映射 -->
        <select id="selectAllByPage" resultType="com.dongsheng.mybatis.pojo.Car">
            SELECT
                id,car_num,brand,guide_price,produce_time,car_type
            FROM
                t_car
            LIMIT
                #{startIndex},#{pageSize}
        </select>
    </mapper>
  • test测试类

    @Test
    public void testSelectAllByPage(){
        // 假设前端传过来的数据 pageNum=3 ,pageSize=3
        Integer pageNum = 3;   //⻚码
        Integer pageSize = 3;  // 每⻚显示记录条数
        Integer startIndex = (pageNum-1)*pageSize;
        SqlSession sqlSession = OpenSqlSessionUtil.openSession();
        CarMapper mapper = sqlSession.getMapper(CarMapper.class);
        List<Car> cars = mapper.selectAllByPage(startIndex, pageSize);
        cars.forEach(car -> {
            System.out.println(car);
        });
        sqlSession.close();
    }

获取数据不难,难的是获取分⻚相关的数据⽐较难。可以借助mybatis的PageHelper插件。

1.2 mybatis使用PageHelper

  • 第⼀步:引⼊依赖

    <!-- pom.xml -->
    <dependency>
        <groupId>com.github.pagehelper</groupId>
        <artifactId>pagehelper</artifactId>
        <version>5.3.1</version>
    </dependency>
  • 第⼆步:在mybatis-config.xml⽂件中配置插件

    <plugins>
        <plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
    </plugins>
  • 第三步:编写Java代码

    CarMapper接口

    public interface CarMapper {
        List<Car> selectAll();
    }

    CarMapper.xml

    <mapper namespace="com.dongsheng.mybatis.mapper.CarMapper">
        <!--
            List<Car> selectAll()
        -->
        <select id="selectAll" resultType="com.dongsheng.mybatis.pojo.Car">
            SELECT
                id,car_num,brand,guide_price,produce_time,car_type
            FROM
                t_car
        </select>
    </mapper>

    test测试类

    @Test
        public void testSelectAllByPage(){
            SqlSession sqlSession = OpenSqlSessionUtil.openSession();
            CarMapper mapper = sqlSession.getMapper(CarMapper.class);
    ​
            // 关键点 :在查询语句之前开启分⻚功能。
            PageHelper.startPage(3,3);
            // 执行查询语句
            List<Car> cars = mapper.selectAll();
            // 获取分页的信息对象
            PageInfo<Car> pageInfo = new PageInfo<>(cars, 3);
    ​
            System.out.println(pageInfo);
        }

    关键点:

    • 在查询语句之前开启分⻚功能。

    • 在查询语句之后封装PageInfo对象。(PageInfo对象将来会存储到request域当中。在⻚⾯上展 示。)

  • 执⾏结果:

    PageInfo{
        pageNum=3, pageSize=3, size=3, startRow=7, endRow=9, total=12, pages=4, 
        
        list=Page{count=true, pageNum=3, pageSize=3, startRow=6, endRow=9, total=12,        pages=4, reasonable=false, pageSizeZero=false}
        
        [Car{id=172, carNum='6666', brand='丰田霸道', guidePrice=32.0, produceTime='2020-10-11', carType='燃油车'}, Car{id=173, carNum='1008', brand='本田超雄', guidePrice=30.0, produceTime='2000-10-19', carType='燃油车'}, Car{id=174, carNum='1008', brand='比亚迪燃烧', guidePrice=30.0, produceTime='2000-10-11', carType='电池车'}], 
        
        prePage=2, nextPage=4, isFirstPage=false, isLastPage=false,        hasPreviousPage=true, hasNextPage=true, navigatePages=3, navigateFirstPage=2, navigateLastPage=4,navigatepageNums=[2, 3, 4]}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值