mybaits 分页插件 pageHelper5.0.2

本文由黑壳网原创

本文来源mybaits 分页插件 pageHelper5.0.2~黑壳网

壳叔搞笑一刻

一个老帽儿从未乘过电梯。
这天,他来到一家饭店,站在电梯门口看见一位老太太进了电梯,过了一会儿,电梯门又打开了,出来了一位年轻漂亮的姑娘,他惊喜过望地想:“哇,要是把我老婆带来就好了。”
d1ecbed9e4c046c2b4f204dd8b6af33e-273a5f9944b13e6cced9f2241eefe42c.jpg

如果你在找Mybatis的分页插件,那么PageHelper一定会是你的首选。这一定会是使用最方便的分页插件。这个插件它支持任何复杂的单表,多表分页。

今天会详细介绍 pageHelper的5.0的使用

目前该插件,支持的数据库有

  1. Oracle

  2.  Mysql

  3. MariaDB

  4. SQLite

  5.  Hsqldb

  6. PostgreSQL

  7. DB2

  8. SqlServer(2005,2008)

  9. Informix

  10. H2

  11. SqlServer2012

  12. Derby

使用 PageHelper 你只需要在 classpath 中包含 pagehelper-x.x.x.jar 和 jsqlparser-0.9.5.jar

如果你使用 Maven,你只需要在 pom.xml 中添加下面的依赖:

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

与分页插件 PageHelper 5.0.0 同时发布的还有 pagehelper-spring-boot-starter。

如果你使用 Spring Boot,你只需要在 pom.xml 中添加下面的依赖:

<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>1.0.0</version>
</dependency>

有关 pagehelper-spring-boot-starter 的用法可以参考集成示例 MyBatis-Spring-Boot

接着,在spring-mybatis.xml中是这样配置:

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 数据库连接池 -->
        <property name="dataSource" ref="dataSource" />
        <!-- 加载mybatis的全局配置文件 -->
        <property name="mapperLocations">
            <array>
                <value>classpath:mapping/*.xml</value>
            </array>
        </property>
        <!-- <property name="configLocation" value="classpath:sqlMapConfig.xml" /> -->
        <property name="plugins">
            <array>
                <bean class="com.github.pagehelper.PageInterceptor">
                    <property name="properties">
                        <value>
                            helperDialect=mysql
                        </value>
                    </property>
                </bean>
            </array>
        </property>
    </bean>

配置结束后,进入正题,创建一个查询语句,用了pageHelper 查询语句与之前的一样。

    select
    <include refid="product"></include>
    from product
    where 1 = 1

查询一个product 的表

	/**
     * 产品管理界面
     *
     * @param request
     * @param model
     * @return
     */
    @RequestMapping(value = "productManage")
    private String productManage(HttpServletRequest request, Model model, ProductDetail productDetail,
                                 @RequestParam(required = true, defaultValue = "1") Integer page,
                                 @RequestParam(required = false, defaultValue = "10") Integer pageSize) {

        PageHelper.startPage(page, pageSize);
        List<ProductDetail> productDetails = productService.getProductManage(productDetail);

        PageInfo<ProductDetail> p = new PageInfo<ProductDetail>(productDetails);

        /**
         * 返回产品查询信息
         */
        model.addAttribute("productDetail", productDetail);
        /**
         * 返回产品信息集合
         */
        model.addAttribute("productDetails", productDetails);
        /**
         * 分页配置信息返回
         */
        model.addAttribute("page", p);
        return "manage/product/productManage";
    }

可以看到,方法里有两个参数,前面也说了,这是一个demo,仅仅只是一个非常简单的分页效果。

PageHelper.startPage(page, pageSize);

这段代码表示,程序开始分页了,page默认值是1,pageSize默认是10,意思是从第1页开始,每页显示10条记录。

PageInfo这个类是插件里的类,这个类里面的属性还是值得看一看:

    //当前页
    private int pageNum;
    //每页的数量
    private int pageSize;
    //当前页的数量
    private int size;

    //由于startRow和endRow不常用,这里说个具体的用法
    //可以在页面中"显示startRow到endRow 共size条数据"

    //当前页面第一个元素在数据库中的行号
    private int startRow;
    //当前页面最后一个元素在数据库中的行号
    private int endRow;
    //总记录数
    private long total;
    //总页数
    private int pages;
    //结果集
    private List<T> list;

    //前一页
    private int prePage;
    //下一页
    private int nextPage;

    //是否为第一页
    private boolean isFirstPage = false;
    //是否为最后一页
    private boolean isLastPage = false;
    //是否有前一页
    private boolean hasPreviousPage = false;
    //是否有下一页
    private boolean hasNextPage = false;
    //导航页码数
    private int navigatePages;
    //所有导航页号
    private int[] navigatepageNums;
    //导航条上的第一页
    private int navigateFirstPage;
    //导航条上的最后一页
    private int navigateLastPage;

PageInfo p=new PageInfo(list);

然后mv.addObject("page", p);

这样在页面中就可以通过{page.nextPage}翻到下一页, <br> {page.prePage}翻到上一页,

ok是不是简单了许多,热爱编程,学习不停止!

黑壳博客 blog.bhusk.com

E-mail:keshu@bhusk.com

本文由 黑壳博客的壳叔 创作或转载,采用 知识共享署名 3.0 中国大陆许可协议 进行许可。

可自由转载、引用,但需署名作者且注明文章

留下你的脚步
推荐阅读