springboot使用PageInfo进行分页
官方文档:
HowToUse
和Spring集成
集成 Spring 3.x
集成 Spring 4.x
引入依赖
<!-- 分页插件 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.5</version>
</dependency>
pagehelper-spring-boot-starter
引入了pagehelper-spring-boot-autoconfigure
而PageHelperAutoConfiguration
会向sqlSessionFactory
中添加PageInterceptor
application.properties配置
# 分页插件
# 分页插件会自动检测当前的数据库链接,自动选择合适的分页方式。 你可以配置helperDialect属性来指定分页插件使用哪种方言。配置时,可以使用下面的缩写值:
#oracle,mysql,mariadb,sqlite,hsqldb,postgresql,db2,sqlserver,informix,h2,sqlserver2012,derby
pagehelper.helper-dialect=mysql
# 为了支持startPage(Object params)方法,增加了该参数来配置参数映射,用于从对象中根据属性名取值,
# 可以配置 pageNum,pageSize,count,pageSizeZero,reasonable,不配置映射的用默认值,
# 默认值为pageNum=pageNum;pageSize=pageSize;count=countSql;reasonable=reasonable;pageSizeZero=pageSizeZero。
pagehelper.params=count=countSql
# 页码<=0 查询第一页,页码>=总页数查询最后一页
pagehelper.reasonable=true
# 支持通过 Mapper 接口参数来传递分页参数,默认值false,分页插件会从查询方法的参数值中,自动根据上面 params 配置的字段中取值,查找到合适的值时就会自动分页。
pagehelper.support-methods-arguments=true
yml配置
pagehelper:
helper-dialect: mysql
pagehelper.params: count=countSql
reasonable: true
support-methods-arguments: true
Controller
package com.lhh.myspringboot.controller;
import com.github.pagehelper.PageInfo;
import com.lhh.myspringboot.bean.Admin;
import com.lhh.myspringboot.service.AdminService;
import org.apache.commons.lang3.math.NumberUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
/**O
* @author lvhouhou(lvhouhou @ 163.com)
*/
@RestController
public class PageInfoController {
@Autowired
private AdminService adminService;
@RequestMapping(value = "/getPageInfoList", method = {RequestMethod.POST})
public PageInfo<Admin> getPageInfoList(@RequestParam String page,
@RequestParam String size){
PageInfo<Admin> adminList = adminService.getAdminList(NumberUtils.toInt(page, 1),
NumberUtils.toInt(size, 15));
return adminList;
}
}
service
注意事项
: PageHelper.startPage(page, size); 这个语句只对后面紧接着的SQL起作用,所以紧接着的应该是分页查询的SQL,而不能是其他的。
package com.lhh.myspringboot.service.impl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.lhh.myspringboot.bean.Admin;
import com.lhh.myspringboot.dao.AdminDao;
import com.lhh.myspringboot.service.AdminService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class AdminServiceImpl implements AdminService {
@Autowired
private AdminDao adminDao;
@Override
public Admin getAdmin(String id) {
return null;
}
@Override
public void register(Admin admin) {
adminDao.register(admin);
}
@Override
public PageInfo<Admin> getAdminList(int page, int size) {
PageHelper.startPage(page, size); // 这个语句只对后面紧接着的SQL起作用,所以紧接着的应该是分页查询的SQL,而不能是其他的。
List<Admin> adminList = adminDao.getAdminList();
PageInfo<Admin> adminPageInfo = new PageInfo<>(adminList);
return adminPageInfo;
}
}
dao接口
package com.lhh.myspringboot.dao;
import com.lhh.myspringboot.bean.Admin;
import java.util.List;
/**
* @author lvhouhou(lvhouhou @ 163.com)
*/
public interface AdminDao {
List<Admin> getAdminList();
}
Mapper文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.lhh.myspringboot.dao.AdminDao">
<select id="getAdminList" resultType="com.lhh.myspringboot.bean.Admin">
select * from admin
</select>
</mapper>
结果
PageInfo.list 结果集
PageInfo.pageNum 当前页码
PageInfo.pageSize 当前页面显示的数据条目
PageInfo.pages 总页数
PageInfo.total 数据的总条目数
PageInfo.prePage 上一页
PageInfo.nextPage 下一页
PageInfo.isFirstPage 是否为第一页
PageInfo.isLastPage 是否为最后一页
PageInfo.hasPreviousPage 是否有上一页
PageHelper.hasNextPage 是否有下一页