美文网首页
MyBatis中简化分页(PageHelper)

MyBatis中简化分页(PageHelper)

作者: 凡哥爱丽姐 | 来源:发表于2020-07-04 12:18 被阅读0次

1、内存分页(使用RowBounds对象进行分页)

    Mybatis使用RowBounds对象进行分页,它是针对ResultSet结果集执行的内存分页,而非物理分页。

    注:沿用上一章中的配置文件和数据库

import com.fan.entity.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.RowBounds;
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 Test2 {
    public static void main(String[] args) {
        Reader resourceAsReader = null;
        SqlSession sqlSession=null;
        try {
            resourceAsReader = Resources.getResourceAsReader("mybatis-config.xml");
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsReader);
            sqlSession = sqlSessionFactory.openSession();
            //内存分页:实现原理是将数据全部提取到内存中,对内存中的数据进行分页
            List<User> userList = sqlSession.selectList("com.fan.dao.UserDao.findAllUser", null,new RowBounds(0, 4));
            for (User user:userList) {
                System.out.println(user.getName());
            }
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if(sqlSession!=null){
                sqlSession.close();
            }
        }
    }
}

    测试结果如下图所示

测试结果

2、物理分页(使用分页插件)

    分页插件的基本原理是使用Mybatis提供的插件接口,实现自定义插件,在插件的拦截方法内拦截待执行的sql,然后重写sql,根据dialect方言,添加对应的物理分页语句和物理分页参数。

    2.1、导入jar 包( 分页插件:pagehelper.jar )

<dependency>
       <groupId>com.github.pagehelper</groupId>
       <artifactId>pagehelper</artifactId>
       <version>5.1.6</version>
</dependency>

    2.2、在MyBatis 的总体文件中配置插件( 放到<environments default="development">之前 )

  <plugins>  
          <!-- PageHelper4.1.6 -->   
          <plugin interceptor="com.github.pagehelper.PageHelper">  
               <property name="dialect" value="mysql"/>        
         </plugin>  
  </plugins>  

interceptor 拦截器
dialect 方言

    注意:插件5.1以后interceptor不同,并且不需要指定数据库名字(我的jar包使用的是5.1以后的,所以配置文件选这个)

<plugins>
        <plugin interceptor="com.github.pagehelper.PageInterceptor">
        </plugin>
</plugins>

    2.3、测试类(//PageHelper.startPage(当前页,每页条数) )

import com.fan.dao.UserDao;
import com.fan.entity.User;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
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 Test3 {
    public static void main(String[] args)  throws IOException {
//分页查询(注意事项:设置分页的值一定要在查询之前)
        //1.在工具类中指定页码值和显示条数
        PageHelper.startPage(1,5);
        //2.调取查询的方法,得到结果集
        Reader resourceAsReader = Resources.getResourceAsReader("mybatis-config.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsReader);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        UserDao userDaoMapper = sqlSession.getMapper(UserDao.class);
        List<User> list=userDaoMapper.findAllUser();

        //3.将list集合封装到PageInfo对象中
        PageInfo pageInfo=new PageInfo(list);
        List<User> list2= pageInfo.getList();
        //4.得到结果
        for (User user1 :list2) {
            System.out.println(user1.getName());
        }
        System.out.println("每页显示条数:"+pageInfo.getPageSize());
        System.out.println("当前页的条数:"+pageInfo.getSize());
        System.out.println("总条数:"+pageInfo.getTotal());
        System.out.println("总页数:"+pageInfo.getPages());
        System.out.println("上一页:"+pageInfo.getPrePage());
        System.out.println("下一页:"+pageInfo.getNextPage());
        System.out.println("当前页:"+pageInfo.getPageNum());
    }
}

    测试结果如下图所示

测试结果

相关文章

网友评论

      本文标题:MyBatis中简化分页(PageHelper)

      本文链接:https://www.haomeiwen.com/subject/cghnohtx.html