mybatis pageHelper使用

本文仅限参考, 测试发现 使用过程中有很多问题理解不通, 但暂时不影响功能使用

问题:

  1. 纳入spring管理的pageHelper配置无效

 

环境 : springboot1.5.17, oracle

1. maven依赖

<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>1.2.3</version>
    <exclusions>
        <!-- 根据需要确定是否要去掉mybatis的starter -->
        <exclusion>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
        </exclusion>
    </exclusions>
</dependency>

2. pageHelper配置

/**
 * 没有详细了解, 感觉配置了也没啥用
 * @return
 */
@Bean
public PageHelper pageHelper() {
    PageHelper pageHelper = new PageHelper();
    Properties properties = new Properties();

    properties.setProperty("offsetAsPageNum", "true");
    properties.setProperty("rowBoundsWithCount", "true");

    // 合理化参数,看网上教程解释, 当参数有误如页面<=0,则显示第一页, 
    //页码>最大页码时,显示最后一页的数据
    
    // 我测试时发现 页码和每页记录数量值(负数,0, 分页范围内的正数, 分页范围外的正数)不同时,
    //返回的结果不同,暂时不建议使用该属性
    
    properties.setProperty("reasonable", "true");

    //配置数据库的方言, 我测试的比较简单, 感觉这是唯一对我有用的参数
    properties.setProperty("dialect", "oracle");
    pageHelper.setProperties(properties);
    return pageHelper;
}

3. 分页代码

@Autowired
private PageHelper pageHelper;

@Test
public void pageHelpTest2(){

    // 页码
    int pageNum = 2;
    //没有数据量
    int pageSize = 2;

    // 调用pageHelper的startPage方法后, 一定要消费掉这个page, 作用于距离当前page最近的一条查询语句
    // 会自动获取总记录数(详见构造函数)
    Page page = pageHelper.startPage(pageNum, pageSize);

    //从数据库获取信息,同时会消费掉page(距离page最近的一条查询sql才能消费掉这个page)
    // 查询结果页也会封装到page对象(pag对象继承了ArrayList)
    pageHelpMapper.listStudentByScore(80);

    // Page{count=true, pageNum=2, pageSize=2, startRow=2, endRow=4, total=6, pages=3, reasonable=false, pageSizeZero=false}
//        System.out.println(page);

    // 遍历获取的数据, page的tostring方法被重写了, 直接输出的话没有详细的结果
    page.forEach(item-> System.out.println(item));


    // 分页后的基本数据
    page.getPageNum();// 当前页码
    page.getPageSize(); // 每页数据量
    page.getPages();// 总页数
    page.getTotal();//总记录数量

    PageInfo<Student> pageInfo = new PageInfo<>(page);
    // 所有页码, 如果不需要该数据,则可以直接返回page对象
    pageInfo.getNavigatepageNums();// 所有页码 [1, 2, 3]

    //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}, prePage=1, nextPage=3, isFirstPage=false, isLastPage=false, hasPreviousPage=true, hasNextPage=true,  navigatePages=8, navigateFirstPage=1, navigateLastPage=3, navigatepageNums=[1, 2, 3]}
//        System.out.println("pageinfo="+pageInfo);
}

4. 调用mapper查询数据库, 返回值为Page类型, 且两者包含的数据是一样的如图:

5. pageHelp使用中可能的问题

5.1 打印日志发现仅打印了查总数的sql, 没有打印查询数据的sql:

原因1: 根据条件查不到数据, 就没有再发起差具体记录的sql请求

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值