MyBatis+SpringMVC+SpringBootSpringBoot极简教程 · Spring Boot Java 杂谈

mybaits 分页插件 pageHelper5.0.2

2017-06-18  本文已影响1215人  壳叔

本文由黑壳网原创

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

壳叔搞笑一刻

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

d1ecbed9e4c046c2b4f204dd8b6af33e-273a5f9944b13e6cced9f2241eefe42c.jpgd1ecbed9e4c046c2b4f204dd8b6af33e-273a5f9944b13e6cced9f2241eefe42c.jpg

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

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

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

<ol ><li><p>Oracle</p></li><li><p> Mysql</p></li><li><p>MariaDB</p></li><li><p>SQLite</p></li><li><p> Hsqldb</p></li><li><p>PostgreSQL</p></li><li><p>DB2</p></li><li><p>SqlServer(2005,2008)</p></li><li><p>Informix</p></li><li><p>H2</p></li><li><p>SqlServer2012</p></li><li><p>Derby</p></li></ol>

<p>使用 PageHelper 你只需要在 classpath 中包含 <a data-cke-saved-href="http://repo1.maven.org/maven2/com/github/pagehelper/pagehelper/" href="http://repo1.maven.org/maven2/com/github/pagehelper/pagehelper/" target="_blank">pagehelper-x.x.x.jar</a> 和<a data-cke-saved-href="http://repo1.maven.org/maven2/com/github/jsqlparser/jsqlparser/0.9.5/" href="http://repo1.maven.org/maven2/com/github/jsqlparser/jsqlparser/0.9.5/" target="_blank"> jsqlparser-0.9.5.jar</a>。

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

<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 的用法可以参考集成示例 <a data-cke-saved-href="https://github.com/ykz200/MyBatis-Spring-Boot" href="https://github.com/ykz200/MyBatis-Spring-Boot" target="_blank">MyBatis-Spring-Boot</a>

接着,在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<CityList> p=new PageInfo<CityList>(list);

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

这样在页面中就可以通过${page.nextPage}翻到下一页,

${page.prePage}翻到上一页,

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

上一篇下一篇

猜你喜欢

热点阅读