zoukankan      html  css  js  c++  java
  • MyBatis PageHelper分页插件

    1 PageHelper作用

    官网:https://pagehelper.github.io/

    PageHelper是一个Mybatis的分页插件, 负责将已经写好的sql语句, 进行分页加工。官网说法:如果你也在用 MyBatis,建议尝试该分页插件,这一定是最方便使用的分页插件。分页插件支持任何复杂的单表、多表分页。

    优点:无需你自己去封装以及关心sql分页等问题,使用很方便,前端取数据也很方便。

    2 导入PageHelper插入依赖

    <!--MyBatis的PageHelper插件-->
    <dependency>
        <groupId>com.github.pagehelper</groupId>
        <artifactId>pagehelper</artifactId>
        <version>5.0.3</version>
    </dependency>
    

    3 添加分页插件配置

    3.1 SqlMapConfig.xml配置

    如果是单独的MyBatis框架,需要在SqlMapConfig.xml添加分页插件的配置

    <!--
        plugins在配置文件中的位置必须符合要求,否则会报错,顺序如下:
        properties?, settings?,
        typeAliases?, typeHandlers?,
        objectFactory?,objectWrapperFactory?,
        plugins?,
        environments?, databaseIdProvider?, mappers?
    -->
    <plugins>
        <!-- com.github.pagehelper为PageHelper类所在包名 -->
        <plugin interceptor="com.github.pagehelper.PageInterceptor">
            <!--数据库方言-->
            <property name="helperDialect" value="mysql"/>
            <!--合理化分页-->
            <property name="reasonable" value="true"/>
        </plugin>
    </plugins>
    

    必须注意配置的顺序,顺序出错,会执行报错!

    这里PageHelper有一些参数可以设置,具体可以查看官网文档。

    3.2 applicationContext.xml

    如果是MyBatis与Spring整合,需要修改Spring的applicationContext.xml

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">  
      <!-- 注意:这里还有其他Spring相关配置 -->
      <property name="plugins">
        <array>
          <bean class="com.github.pagehelper.PageInterceptor">
            <property name="properties">
              <value>
                helperDialect=mysql
                reasonable=true
              </value>
            </property>
          </bean>
        </array>
      </property>
    </bean>
    

    4 编写Dao方法

    package com.yiidian.dao;
    import com.yiidian.domain.Customer;
    import java.util.List;
    
    /**
     * Dao接口
     *一点教程网 - www.yiidian.com
     */
    public interface CustomerDao {
        /**
         * 查询所有用户
         */
        public List<Customer> findAll();
    }
    

    这里只需要定义普通查询的方法即可,无需为分页另外定义特殊的方法。

    5 编写测试类

    package com.yiidian.mybatis;
    
    import com.github.pagehelper.PageHelper;
    import com.github.pagehelper.PageInfo;
    import com.yiidian.dao.CustomerDao;
    import com.yiidian.domain.Customer;
    import com.yiidian.utils.MyBatisUtils;
    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 org.junit.Test;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.List;
    
    /**
     * MyBatis测试类 - PageHelper分页插件的使用
     * 一点教程网 - www.yiidian.com
     */
    public class TestCustomerDao {
        @Test
        public void test1(){
            //1.获取SqlSession对象
            SqlSession sqlSession = MyBatisUtils.getSession();
    
            //2.生成Dao代理对象
            CustomerDao customerDao = sqlSession.getMapper(CustomerDao.class);
    
            //3.设置分页参数
            int pageNun = 1; // 页码
            int pageSize = 2;// 每页显示条数
            PageHelper.startPage(pageNun,pageSize);
    
            //4. 查询用户数据
            List<Customer> list = customerDao.findAll();
    
            //5.把用户数据封装到PageInfo分页结果对象
            PageInfo<Customer> page = new PageInfo<>(list);
    
            //6.取出PageInfo的属性
            //测试PageInfo全部属性
            //PageInfo包含了非常全面的分页属性
            System.out.println("当前页码="+page.getPageNum());
            System.out.println("每页显示条数="+page.getPageSize());
            System.out.println("当前页起始行号="+page.getStartRow());
            System.out.println("当前页结束行号="+page.getEndRow());
            System.out.println("总记录数="+page.getTotal());
            System.out.println("总页数="+page.getPages());
            System.out.println("是否为第1页="+page.isIsFirstPage());
            System.out.println("是否为最后1页="+page.isIsLastPage());
            System.out.println("是否有上一页="+page.isHasPreviousPage());
            System.out.println("是否有下一页="+page.isHasNextPage());
            System.out.println("当前页数据=");
            for(Customer c:page.getList()){
                System.out.println(c);
            }
            //7.关闭连接
            sqlSession.close();
        }
    }
    

    6 运行测试类,查看结果

    PageHelper把所有分页结果数据封装到PageInfo对象,下面是打印出常用的属性

    file

    源码下载:https://pan.baidu.com/s/1_B6DfcpXPiRxBiVuxxlRPQ

    file

    欢迎关注我的公众号::一点教程。获得独家整理的学习资源和日常干货推送。
    如果您对我的系列教程感兴趣,也可以关注我的网站:yiidian.com

  • 相关阅读:
    Java 中的打印流
    Java 转换流的简单理解
    Java IO流之缓冲流(深入浅出学习)
    Java 中与IO流有关的集合(Properties集合)
    Java IO字符流
    Objective-C 中如何测量代码的效率
    android studio 转为eclipse快捷键后还存在的问题汇总
    Mac 下安装运行Rocket.chat
    Android属性动画完全解析(下),Interpolator和ViewPropertyAnimator的用法
    Android属性动画完全解析(中),ValueAnimator和ObjectAnimator的高级用法
  • 原文地址:https://www.cnblogs.com/yiidian/p/12401280.html
Copyright © 2011-2022 走看看