zoukankan      html  css  js  c++  java
  • Mybatis 的分页插件PageHelper-4.1.1的使用

    Mybatis 的分页插件 PageHelper


    我用的版本是PageHelper-4.1.1Mybatis-3.3.0
    PageHelper 依赖于 jsqlparser-0.9.4.jar

    使用方法:
    1、根据Mybatis的版本下载对应版本的PageHelper ( Mybatis最低版本不能低于3.3 )
    2、在Mybatis的配置文件 Mybatis-Configu.xml中配置PageHelper插件,配置示例:
       plugins插件的配置在 settings之后 在environments之前
       settings中设置Mybatis的一些额外的运行参数 如是否开启延迟加载,动态代理使用CG-LIB,或JAVALIB等
        <plugins>
             <!-- PageHelper4.1.1 --> 
            <plugin interceptor="com.github.pagehelper.PageHelper">
                <property name="dialect" value="oracle"/>
                <property name="offsetAsPageNum" value="false"/>
                <property name="rowBoundsWithCount" value="false"/>
                <property name="pageSizeZero" value="true"/>
                <property name="reasonable" value="false"/>
                <property name="supportMethodsArguments" value="false"/>
                <property name="returnPageInfo" value="none"/>
            </plugin>
        </plugins>  
    3、使用方法
    pageHelper会使用ThreadLocal获取到同一线程中的变量信息,各个线程之间的Threadlocal不会相互干扰,也就是Thread1中的ThreadLocal1之后获取到Tread1中的变量的信息,不会获取到Thread2中的信息
    所以在多线程环境下,各个Threadlocal之间相互隔离,可以实现,不同thread使用不同的数据源或不同的Thread中执行不同的SQL语句
    所以,PageHelper利用这一点通过拦截器获取到同一线程中的预编译好的SQL语句之后将SQL语句包装成具有分页功能的SQL语句,并将其再次赋值给下一步操作,所以实际执行的SQL语句就是有了分页功能的SQL语句
    PageHelper只对紧跟着的第一个SQL语句起作用
    如上:所以若一个方法中涉及到多个查询,需要小心,避免为不需要分页的添加了分页,而真正需要分页的却没有被分页
    1)、统计总数,(将SQL语句变为 select count(0) from xxx,只对简单SQL语句其效果,复杂SQL语句需要自己写)
        Page<?> page = PageHelper.startPage(1,-1);
        long count = page.getTotal();
    2)、分页,pageNum - 第N页, pageSize - 每页M条数
        A、只分页不统计(每次只执行分页语句)
        PageHelper.startPage([pageNum],[pageSize]);
        List<?> pagelist = queryForList( xxx.class, "queryAll" , param);
        //pagelist就是分页之后的结果
        B、分页并统计(每次执行2条语句,一条select count语句,一条分页语句)适用于查询分页时数据发生变动,需要将实时的变动信息反映到分页结果上
        Page<?> page = PageHelper.startPage([pageNum],[pageSize],[iscount]);
        List<?> pagelist = queryForList( xxx.class , "queryAll" , param);
        long count = page.getTotal();
        //也可以 List<?> pagelist = page.getList();  获取分页后的结果集
    3)、使用PageHelper查全部(不分页)
        PageHelper.startPage(1,0);
        List<?> alllist = queryForList( xxx.class , "queryAll" , param);
    4)、PageHelper的其他API
        String orderBy = PageHelper.getOrderBy();    //获取orderBy语句
        Page<?> page = PageHelper.startPage(Object params);
        Page<?> page = PageHelper.startPage(int pageNum, int pageSize);
        Page<?> page = PageHelper.startPage(int pageNum, int pageSize, boolean isCount);
        Page<?> page = PageHelper.startPage(pageNumpageSizeorderBy);
        Page<?> page = PageHelper.startPage(pageNumpageSizeisCountisReasonable);    //isReasonable分页合理化,null时用默认配置
        Page<?> page = PageHelper.startPage(pageNumpageSizeisCountisReasonableisPageSizeZero);    //isPageSizeZero是否支持PageSize为0,true且pageSize=0时返回全部结果,false时分页,null时用默认配置
    5)、默认值
        //RowBounds参数offset作为PageNum使用 - 默认不使用
        private boolean offsetAsPageNum = false;
        //RowBounds是否进行count查询 - 默认不查询
        private boolean rowBoundsWithCount = false;
        //当设置为true的时候,如果pagesize设置为0(或RowBounds的limit=0),就不执行分页,返回全部结果
        private boolean pageSizeZero = false;
        //分页合理化
        private boolean reasonable = false;
        //是否支持接口参数来传递分页参数,默认false
        private boolean supportMethodsArguments = false;  







    附件列表

       

    • 相关阅读:
      C#低级Windows API钩子拦截键盘输入
      PowerDesigner 11 使用心得
      c# windows服务状态、启动和停止服务
      PowerDesigner设计数据库
      C# Windows帐户和目录添加用户权限方法
      ASP.NET的控件Gridview在Firefox中的Border显示问题
      去掉图片连接的虚框
      http://www.ediyang.com/demo/DD_Png/
      WEB前端开发规范文档(for: mrthink.net)
      .net下载文件的常用方法汇总
    • 原文地址:https://www.cnblogs.com/jpfss/p/7483242.html
    Copyright © 2011-2022 走看看