美文网首页
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