MyBatis分页插件

        参考链接:【MyBatis】MyBatis分页插件PageHelper的使用_武哥聊编程-CSDN博客_mybatis分页插件使用

第一步:导入依赖

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

第二步:在mybatis的全局配置文件mybatis-config.xml中配置该插件

        Spring的相关配置:

<!-- 2.配置session工厂 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="configLocation" value="classpath:mybatis-config.xml" />
        <property name="mapperLocations" value="classpath:mappers/*.xml"/>
    </bean>

        在classpath:mybatis-config.xml中配置该插件

        

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!-- 配置分页插件 -->
    <plugins>
        <plugin interceptor="com.github.pagehelper.PageHelper">
            <!-- 设置数据库类型 Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六种数据库-->
            <property name="dialect" value="mysql"/>
        </plugin>
    </plugins>

</configuration>

第三步 在Java代码中的查询语句之前调用插件

 /**
     * 去所有文章展示页面,这个是去博客空间的主页
     *
     * @return 携带上文章的参数,去文章首页
     */
    @RequestMapping(value = {URL_ARTICLE_LIST} ,method = {GET})
    public ModelAndView home(HttpServletRequest request){
        //拿到用户需要的是哪一页的文章数据
        String str_pageNo = request.getParameter("pageNo");
        if(str_pageNo == null){
            //开始使用分页插件,准备查询第一页的8条数据
            PageHelper.startPage(1, 8);
        } else{
            //准备查询 第X页 的8条数据
            PageHelper.startPage(Integer.parseInt(str_pageNo), 8);
        }
        //参数Map
        final Map<String,Object> map = Maps.newHashMap();
        //获取所有作者的所有文章
        final List<Article> articles = articleService.getAllArticle();
        //将查询结果放入分页控件中
        final PageInfo<Article> pageInfo=new PageInfo<>(articles);
        
        //组装数据,在JSP页面可以通过 ${articles} 或者 ${pageInfo}请求获取数据
        map.put("articles",articles);
        map.put("pageInfo",pageInfo);
        //返回某个具体的JSP页面,并且携带上map里面的存储的数据
        return new ModelAndView(FWD_ARTICLE_LIST_HOME,map);
    }

第四步 在页面使用分页信息

    

<!--下面的分页代码由Jay于18/3/26日修改,可以重用多次,请不要修改太多-->
            <div style="text-align: center">
                <ul class="pagination">
                    <li
                            <c:if test="${pageInfo.pageNum==1}">
                                class="disabled"
                            </c:if>>
                        <a href="<c:url value="/actions/article/list?pageNo=1"/> ">«</a>
                    </li>
                    <li>
                        <!--如果当前页数是第一页,那么点上一页仍然是当前页。 -->
                        <a href="<c:url value="/actions/article/list?pageNo=${pageInfo.pageNum==1?pageInfo.pageNum:pageInfo.pageNum-1}"/> ">上一页</a>
                    </li>
                    <!--判断最大页数是否超过X,如果超过X则是X,否则是最大页数。防止分页信息过长 -->
                    <c:forEach begin="1" end="${pageInfo.pages>8?8:pageInfo.pages}" step="1" var="pageNo">
                        <li
                                <c:if test="${pageInfo.pageNum==pageNo}">
                                    class="active"
                                </c:if>>
                            <a href="<c:url value="/actions/article/list?pageNo=${pageNo}"/> ">${pageNo}</a>
                        </li>
                    </c:forEach>
                    <li>
                        <!--如果当前页数是最后一页,那么点击下一页仍然是当前页。 -->
                        <a href="<c:url value="/actions/article/list?pageNo=${pageInfo.pageNum==pageInfo.pages?pageInfo.pageNum:pageInfo.pageNum+1}"/> ">下一页</a>
                    </li>
                    <li
                            <c:if test="${pageInfo.pageNum==pageInfo.pages}">
                                class="disabled"
                            </c:if>>
                        <a href="<c:url value="/actions/article/list?pageNo=${pageInfo.pages}"/> ">»</a>
                    </li>
                </ul>
            </div>

需要在JSP页面导入的CSS样式,摘自bootstrap

<style>
    .pagination {
        display: inline-block;
        padding-left: 0;
        margin: 20px 0;
        border-radius: 4px
    }

    .pagination > li {
        display: inline
    }

    .pagination > li > a, .pagination > li > span {
        position: relative;
        float: left;
        padding: 6px 12px;
        margin-left: -1px;
        line-height: 1.42857143;
        color: #337ab7;
        text-decoration: none;
        background-color: #fff;
        border: 1px solid #ddd
    }

    .pagination > li:first-child > a, .pagination > li:first-child > span {
        margin-left: 0;
        border-top-left-radius: 4px;
        border-bottom-left-radius: 4px
    }

    .pagination > li:last-child > a, .pagination > li:last-child > span {
        border-top-right-radius: 4px;
        border-bottom-right-radius: 4px
    }

    .pagination > li > a:focus, .pagination > li > a:hover, .pagination > li > span:focus, .pagination > li > span:hover {
        z-index: 2;
        color: #23527c;
        background-color: #eee;
        border-color: #ddd
    }

    .pagination > .active > a, .pagination > .active > a:focus, .pagination > .active > a:hover, .pagination > .active > span, .pagination > .active > span:focus, .pagination > .active > span:hover {
        z-index: 3;
        color: #fff;
        cursor: default;
        background-color: #337ab7;
        border-color: #337ab7
    }

    .pagination > .disabled > a, .pagination > .disabled > a:focus, .pagination > .disabled > a:hover, .pagination > .disabled > span, .pagination > .disabled > span:focus, .pagination > .disabled > span:hover {
        color: #777;
        cursor: not-allowed;
        background-color: #fff;
        border-color: #ddd
    }
</style>

第五步 效果展示

如果本文对你有帮助,不妨请我喝瓶可乐吧!

你的打赏是对我最好的支持!

                    

posted @ 2022-07-17 12:13  小大宇  阅读(551)  评论(0编辑  收藏  举报