pageHelper官网:https://pagehelper.github.io/
以下资料均可在官网中查阅到
MyBatis配置pagehelper
-
导入依赖
<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.3.0</version> </dependency>
-
配置mybatis
<!--pagehelper--> <plugins> <plugin interceptor="com.github.pagehelper.PageInterceptor"> <!-- 分页插件会自动检测当前的数据库链接,自动选择合适的分页方式--> <property name="helperDialect" value="mysql"/> <!-- 分页合理化参数,默认值为false。当该参数设置为 true 时, pageNum<=0 时会查询第一页.pageNum>pages(超过总数时), 会查询最后一页。--> <property name="reasonable" value="true"/> <!-- 默认值为 false。设置为 true 时,允许在运行时根据多数据源自动识别对应方言的分页--> <property name="autoRuntimeDialect" value="false"/> <!-- 默认值为 false,当该参数设置为 true 时,如果 pageSize=0 或者 RowBounds.limit = 0 就会查询出全部的结果--> <property name="pageSizeZero" value="true"/> <!-- 为了支持startPage(Object params)方法--> <property name="params" value="pageNum=pageNum;pageSize=pageSize;count=countSql"/> </plugin> </plugins>
-
编写工具类
@Data @AllArgsConstructor @NoArgsConstructor @Accessors(chain = true) public class PageResult implements Serializable { //当前页码 private Integer pageNum; //每页显示条数 private Integer pageSize; //是否开启总条数查询 private Boolean countsql=true; }
-
测试
如果需要不执行查询总条数的操作,将pagehelper在mybatis配置中的params属性的
count=countSql
设定为false即可@Test public void test09(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class); //传入pageNum和pageSize,对后面执行的第一条mapper语句进行分页操作 //查询第二页的数据,每页显示3条数据 PageHelper.startPage(2,3); //也可以选择传入对象进去,mybatis配置文件中需要配置params // PageResult pageResult = new PageResult(); // pageResult.setPageNum(2).setPageSize(3); // PageHelper.startPage(pageResult); List<Employee> employees = mapper.queryAllEmpDept(); //使用pageinfo可以获取分页查询的数据 PageInfo<Employee> employeePageInfo = new PageInfo<>(employees); System.out.println(employeePageInfo); List<Employee> list = employeePageInfo.getList();//查询出来的数据,实际list对象是Page System.out.println("分页开始行:"+employeePageInfo.getStartRow());//分页查询的开始行 System.out.println("总条数:"+employeePageInfo.getSize());//分页查询的总条数 System.out.println(list);//输出PageInfo获得的list for (Employee employee : list) { System.out.println(employee); } System.out.println("============================="); for (Employee employee : employees) { System.out.println(employee); } }
-
测试结果
在spring的配置文件中配置
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 注意其他配置 -->
<property name="plugins">
<array>
<bean class="com.github.pagehelper.PageInterceptor">
<property name="properties">
<!--使用下面的方式配置参数,一行配置一个 -->
<value>
params=value1
</value>
</property>
</bean>
</array>
</property>
</bean>
在配置类中配置
@Configuration
public class PageConfig {
@Resource
private List<SqlSessionFactory> sqlSessionFactoryList;
@PostConstruct
public void init() {
PageInterceptor pageInterceptor = new PageInterceptor();
Properties properties = new Properties( );
properties . put("helperDialect", "mysq1");
properties . put("reasonable", "true");
properties. put (" autoRunt imeDialect", "false");
properties . put("pageSizeZero","true");
properties.put(" params"," pageNum=pageNow; count=executeCount");
pageInterceptor . setProperties (properties);
for (SqlSessionFactory sqlSessionFactory : sqlSessionFactoryList) {
sqlSessionFactory . getConfiguration() . addInterceptor( pageInterceptor);
}
}
}
springboot中配置
-
引入依赖
<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.2.12</version> </dependency>
-
properties配置文件中配置
这里的配置只供样式参考
## pagehelper分页插件配置 ## #标识是哪一种数据库 pagehelper.helperDialect=mysql #启用合理化,如果pageNum<1会查询第一页,如果pageNum>pages会查询最后一页 pagehelper.reasonable=true #为了支持startPage(Object params)方法,增加了该参数来配置参数映射,用于从对象中根据属性名取值, 可以配置pageNum,pageSize,count,pageSizeZero,reasonable,不配置映射的用默认值, 默认值为pageNum=pageNum;pageSize=pageSize;count=countSql;reasonable=reasonable;pageSizeZero=pageSizeZero pagehelper.params=count=countSql #支持通过 Mapper 接口参数来传递分页参数,默认值false,分页插件会从查询方法的参数值中,自动根据上面 params 配置的字段中取值,查找到合适的值时就会自动分页 pagehelper.supportMethodsArguments=true #如果 pageSize=0 就会查询出全部的结果(相当于没有执行分页查询) pagehelper.page-size-zero=true