目录
2. mybatis-config.xml文件配置plugins标签
1) PageHelper.startPage 静态方法调用
2) PageHelper.startPage 静态方法返回值获取参数
3.2 返回PageInfo(pageInfo包含了更加全面的分页属性)
- <dependency>
- <groupId>com.github.pagehelpergroupId>
- <artifactId>pagehelperartifactId>
- <version>4.2.0version>
- dependency>
- <plugins>
-
- <plugin interceptor="com.github.pagehelper.PageInterceptor">
-
- <property name="reasonable" value="true"/>
- plugin>
- plugins>
PageHelper.startPage 静态方法调用
在你需要进行分页的 MyBatis 查询方法前调用 PageHelper.startPage 静态方法即可
紧跟在这个方法后的第一个MyBatis 查询方法会被进行分页。
- import com.github.pagehelper.PageHelper;
- import com.lyx.mybatis.dao.UserMapper;
- import com.lyx.mybatis.entity.User;
- import org.apache.ibatis.io.Resources;
- import org.apache.ibatis.session.SqlSession;
- import org.apache.ibatis.session.SqlSessionFactory;
- import org.apache.ibatis.session.SqlSessionFactoryBuilder;
-
- import java.io.IOException;
- import java.io.Reader;
- import java.util.List;
-
- public class Test {
- public static void main(String[] args) throws IOException {
- Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
- SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
- //这个session相当于connection
- SqlSession sqlSession = sqlSessionFactory.openSession();
- UserMapper mapper = sqlSession.getMapper(UserMapper.class);
- PageHelper.startPage(1,5);
- List<User> userList = mapper.queryAllUsers();
- for(User u :userList){
- System.out.println(u.toString());
- }
- sqlSession.close();
- }
- }

运行报错:
- Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'com.github.pagehelper.PageInterceptor'.
- Cause: java.lang.ClassNotFoundException: Cannot find class: com.github.pagehelper.PageInterceptor
报错如下:

解决办法:
在5.x版本,mybatis-config.xml中配置pageHelper的格式为:
- <plugins>
- <plugin interceptor="com.github.pagehelper.PageInterceptor">
-
-
- <property name="reasonable " value="true"/>
- plugin>
- plugins>
而在4.x版本中,mybatis-config.xml中的配置为:
- <plugins>
- <plugin interceptor="com.github.pagehelper.PageHelper">
-
- <property name="reasonable " value="true"/>
-
- plugin>
- plugins>
所以重新导入5.x版本的依赖:

运行成功:

2) PageHelper.startPage 静态方法返回值获取参数-
- import com.github.pagehelper.Page;
- import com.github.pagehelper.PageHelper;
- import com.lyx.mybatis.dao.StudentMapper;
- import com.lyx.mybatis.entity.Student;
- import org.apache.ibatis.io.Resources;
- import org.apache.ibatis.session.SqlSession;
- import org.apache.ibatis.session.SqlSessionFactory;
- import org.apache.ibatis.session.SqlSessionFactoryBuilder;
-
- import java.io.IOException;
- import java.io.Reader;
- import java.util.HashMap;
- import java.util.Iterator;
-
- public class StudentTest {
- public static void main(String[] args) throws IOException {
- Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
- SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
- SqlSession sqlSession = sqlSessionFactory.openSession();
-
- StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
- /*
- *在你需要进行分页的 MyBatis 查询方法前调用 PageHelper.startPage 静态方法即可
- *紧跟在这个方法后的第一个MyBatis 查询方法会被进行分页。
- */
- Page
-
- HashMap
studentHashMap = mapper.queryStudents(); -
- Iterator
iterator = studentHashMap.keySet().iterator(); - while (iterator.hasNext()) {
- Integer next = iterator.next();
- System.out.println(studentHashMap.get(next));
- }
- System.out.println("当前页:"+page.getPageNum());
- System.out.println("总数据量:"+page.getTotal());
- System.out.println("总页码:"+page.getPages());
- System.out.println("页面大小:"+page.getPageSize());
- sqlSession.commit();
- sqlSession.close();
- }
- }

运行结果:

当前是第一页,总数据量为1026条,pageSize页面大小为5,所以总页码数为206
Page<Country> page = PageHelper.startPage(1, 10).doSelectPage(
()-> countryMapper.selectGroupBy()
);
-
- import com.github.pagehelper.Page;
- import com.github.pagehelper.PageHelper;
- import com.lyx.mybatis.dao.StudentMapper;
- import com.lyx.mybatis.entity.Student;
- import org.apache.ibatis.io.Resources;
- import org.apache.ibatis.session.SqlSession;
- import org.apache.ibatis.session.SqlSessionFactory;
- import org.apache.ibatis.session.SqlSessionFactoryBuilder;
-
- import java.io.IOException;
- import java.io.Reader;
- import java.util.List;
-
- public class StudentTest {
- public static void main(String[] args) throws IOException {
- Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
- SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
- SqlSession sqlSession = sqlSessionFactory.openSession();
-
- StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
- /*
- *在你需要进行分页的 MyBatis 查询方法前调用 PageHelper.startPage 静态方法即可
- *紧跟在这个方法后的第一个MyBatis 查询方法会被进行分页。
- */
- // Page
- // List
students = studentMapper.queryAllStudents(); - // for (Student student : students) {
- // System.out.println(student);
- // }
- Page
page = PageHelper.startPage(1, 10).doSelectPage( - () -> studentMapper.queryAllStudents()
- );
- List
result = page.getResult(); - for (Student student : result) {
- System.out.println(student);
- }
-
- System.out.println("当前页:" + page.getPageNum());
- System.out.println("总数据量:" + page.getTotal());
- System.out.println("总页码:" + page.getPages());
- System.out.println("页面大小:" + page.getPageSize());
- sqlSession.commit();
- sqlSession.close();
- }
- }

- //也可以直接返回PageInfo,注意doSelectPageInfo方法和doSelectPage
- pageInfo = PageHelper.startPage(1, 10).doSelectPageInfo(new ISelect() {
- @Override
- public void doSelect() {
- countryMapper.selectGroupBy();
- }
- });
- //对应的lambda用法
- pageInfo = PageHelper.startPage(1, 10).doSelectPageInfo(
- () -> countryMapper.selectGroupBy()
- );
注意doSelectPageInfo方法和doSelectPage

lambda写法:
-
- import com.github.pagehelper.ISelect;
- import com.github.pagehelper.Page;
- import com.github.pagehelper.PageHelper;
- import com.github.pagehelper.PageInfo;
- import com.lyx.mybatis.dao.StudentMapper;
- import com.lyx.mybatis.entity.Student;
- import org.apache.ibatis.io.Resources;
- import org.apache.ibatis.session.SqlSession;
- import org.apache.ibatis.session.SqlSessionFactory;
- import org.apache.ibatis.session.SqlSessionFactoryBuilder;
-
- import java.io.IOException;
- import java.io.Reader;
- import java.util.List;
-
- public class StudentTest {
- public static void main(String[] args) throws IOException {
- Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
- SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
- SqlSession sqlSession = sqlSessionFactory.openSession();
-
- StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
- // PageInfo
pageInfo = PageHelper.startPage(1,10).doSelectPageInfo( - // new ISelect() {
- // @Override
- // public void doSelect() {
- // studentMapper.queryAllStudents();
- // }
- // }
- // );
- PageInfo
pageInfo = PageHelper.startPage(1,10).doSelectPageInfo( - ()->studentMapper.queryAllStudents()
- );
- //注意page是getResult()
- List
list = pageInfo.getList(); - for (Student student : list) {
- System.out.println(student);
- }
-
- System.out.println("当前页:" + pageInfo.getPageNum());
- System.out.println("总数据量:" + pageInfo.getTotal());
- System.out.println("总页码:" + pageInfo.getPages());
- System.out.println("页面大小:" + pageInfo.getPageSize());
- //第一页的编码
- System.out.println(pageInfo.getNavigateFirstPage());
- //最后一页的编码
- System.out.println(pageInfo.getNavigateLastPage());
-
- sqlSession.commit();
- sqlSession.close();
- }
- }

pageInfo类可用于分页操作。以下为属性含义:
