mybatis、 hirbernate的分页实现

1、 hirbernate 自带分页
eg:Query q = sess.createQuery("from XXX");
q.setFirstResult(20);设置起始行
q.setMaxResults(10);每页条数
List cats = q.list(); //得到每页的数据封装到一个方法里面

每次点击下一页的时候,根据计算传入不同的 参数 a(起始页) ,b(每页显示数量),实现分页功能
q.setFirstResult(a);设置起始行
q.setMaxResults(b);每页条数

2、mybatis 分页需要myslq limit 函数(效率低,成本高)、或者配置分页插件PageHelper 从而实现分页

mysql :SELECT  *  FROM  student  LIMIT (PageNo - 1) * PageSize,PageSize;

重点讲PageHelper 这个插件的使用。。。

PageHelper的优点是,分页和Mapper.xml完全解耦。实现方式是以插件的形式,对Mybatis执行的流程进行了强化,添加了总数count和limit查询。属于物理分页。

eg:maven项目中 分页插件PageHelper 使用步骤:

① 引入 pagehelper POM依赖

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

 </dependency>

②mybatis对PageHelper的配置

<plugins>

    <plugin interceptor="com.github.pagehelper.PageHelper">
        <property name="dialect" value="mysql"/> //数据库方言
        <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>

③ 分页实现

不需要写分页的sql,只需要一条查询所有数据的sql
Page page = PageHelper.startPage(pageNum, pageSize, true); // 在查询list 之前使用pageHepler的分页,就可以实现分页

List<UserInfo>  list =userService.getUserList();  //查询所有的用户

eg:Page page = PageHelper.startPage(1, 10, true); //表示显示第一页,10条数据,true表示需要统计总数

当我们分页查询出来了,就需要分页的数据显示在前台页面,这时候需要插件提供的一个PageInfo类,这个类有以下属性:

    //当前页
    private int pageNum;
    //每页的数量
    private int pageSize;
    //当前页的数量
    private int size;
    //排序
    private String orderBy;
    //由于startRow和endRow不常用,这里说个具体的用法
    //可以在页面中"显示startRow到endRow 共size条数据"
    //当前页面第一个元素在数据库中的行号
    private int startRow;
    //当前页面最后一个元素在数据库中的行号
    private int endRow;
    //总记录数
    private long total;
    //总页数
    private int pages;
    //结果集
    private List<T> list;
    //第一页
    private int firstPage;
    //前一页
    private int prePage;
    //下一页
    private int nextPage;
    //最后一页
    private int lastPage;
    //是否为第一页
    private boolean isFirstPage = false;
    //是否为最后一页
    private boolean isLastPage = false;
    //是否有前一页
    private boolean hasPreviousPage = false;
    //是否有下一页
    private boolean hasNextPage = false;
    //导航页码数
    private int navigatePages;
    //所有导航页号
    private int[] navigatepageNums;
使用PageInfo这个类,你只需要将查询出来的list放进去:
PageInfo<UserInfo>  p = new PageInfo<UserInfo>(list);
然后将 p 对象放入域对象中,前台通过el 表达式取出来相关属性值就可以啦
比如${page.nextPage}翻到下一页,

至于PageHelper的其他API,可以自行查找。。。。。。









猜你喜欢

转载自blog.csdn.net/qq_15901351/article/details/80503128
今日推荐