mybatis分页插件(实现)

KLQ 2020-05-13 14:50:01 java常见问答 8821

下面要给大家介绍的就是mybatis分页插件实现的内容,你知道应该如何去实现吗?具体的实现步骤是怎样的?下面一起来详细的看看具体步骤吧!

一、代码实现步骤

1、首先要做的就是导入依赖

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

2、之后,就要在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>

3、之后,就是要在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);
    }

4、之后在页面使用分页信息

<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>

5、最终结果

mybatis分页插件

以上实现方式仅供参考,更多相关内容,可以继续关注奇Q工具网的java架构师栏目了解。

推荐阅读:

mybatis批量插入数据如何实现?实现方式有哪些?

mybatis批量更新数据如何实现?实现方式是怎样的?

mybatis批量查询如何实现?mybatis批量删除如何实现?