Mybatis插件-分页查询

    科技2022-07-10  136

    Mybatis插件-分页查询

    1. PageHelper

    PageHelper参考网站

    导入jar包依赖 <!--PageHelper插件--> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.0.0</version> </dependency>

    PageHelper配置

    Mybatis使用注解: 在spring配置文件中添加PageHelper配置 <!--配置SqlSessionFactory--> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="plugins"> <array> <!--配置PageHelper--> <bean class="com.github.pagehelper.PageInterceptor"> <property name="properties"> <value></value> </property> </bean> </array> </property> </bean> Mybatis使用xml: 在mybatis的配置文件中添加 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!--全局驼峰设置--> <settings> <setting name="mapUnderscoreToCamelCase" value="true"/> </settings> <typeAliases> <package name="cn.domain"/> </typeAliases> <!-- plugins在配置文件中的位置必须符合要求,否则会报错,顺序如下: properties?, settings?, typeAliases?, typeHandlers?, objectFactory?,objectWrapperFactory?, plugins?, environments?, databaseIdProvider?, mappers? --> <plugins> <!-- com.github.pagehelper为PageHelper类所在包名 --> <plugin interceptor="com.github.pagehelper.PageInterceptor"> <!-- 使用下面的方式配置参数,后面会有所有的参数介绍 --> <!-- <property name="param1" value="value1"/>--> <!--分页合理化--> <property name="reasonable" value="true"/> </plugin> </plugins> </configuration>

    在spring配置文件中添加

    <!--配置SqlSessionFactory--> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="configLocation" value="classpath:mybatis-config.xml"/> <property name="dataSource" ref="dataSource"/> <property name="mapperLocations" value="classpath:mapper/*.xml"/> </bean>

    代码中使用

    //在查询之前调用,传入页码和每页数据数 PageHelper.startPage(pn,5); //startPage后面紧跟着这个查询就是一个分页查询 List<Employee> emps = employeeService.findAll(); //使用pageInfo包装查询结果,只需将pageInfo交给页面 //封装了详细的分页信息,传入查询结果还有连续显示的页数 PageInfo page = new PageInfo(emps,5);

    注意事项:

    PageHelper.startPage()后必须紧跟来自数据库的查询,来自数据库的查询结果在startPage()后为Page,否则为Collection,这时Page的total和PageSize相同。 源码为 if (list instanceof Page) { Page page = (Page)list; this.pageNum = page.getPageNum(); this.pageSize = page.getPageSize(); this.pages = page.getPages(); this.list = page; this.size = page.size(); this.total = page.getTotal(); if (this.size == 0) { this.startRow = 0; this.endRow = 0; } else { this.startRow = page.getStartRow() + 1; this.endRow = this.startRow - 1 + this.size; } } else if (list instanceof Collection) { this.pageNum = 1; this.pageSize = list.size(); this.pages = 1; this.list = list; this.size = list.size(); this.total = (long)list.size(); this.startRow = 0; this.endRow = list.size() > 0 ? list.size() - 1 : 0; } PageInfo page = new PageInfo(emps,5),PageInfo的构造函数不能只传入一个list,否则有源码可看出 public PageInfo(List<T> list) { this(list, 8); }
    Processed: 0.008, SQL: 8