Mybatis分页功能---物理分页(Spring MVC+Spring +Mybatis框架)

1、maven下,pom.xml中添加依赖

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

2、spring-mybatis.xml中添加插件(两者取其一就好)

 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <!-- 自动扫描mapping.xml文件 -->
        <property name="mapperLocations" value="classpath*:mappers/*.xml"></property>
        <property name="plugins">
            <array>
                <bean class="com.github.pagehelper.PageHelper">
                    <property name="properties">
                        <value>
                            dialect=hsqldb
                        </value>
                    </property>
                </bean>
            </array>
        </property>
    </bean>

2、或者在mybatis.xml中添加插件

<plugins>
        <!-- com.github.pagehelper为PageHelper类所在包名 -->
        <plugin interceptor="com.github.pagehelper.PageHelper">
            <!-- 4.0.0以后版本可以不设置该参数 -->
            <property name="dialect" value="mysql"/>
            <!-- 该参数默认为false -->
            <!-- 设置为true时,会将RowBounds第一个参数offset当成pageNum页码使用 -->
            <!-- 和startPage中的pageNum效果一样-->
            <property name="offsetAsPageNum" value="true"/>
            <!-- 该参数默认为false -->
            <!-- 设置为true时,使用RowBounds分页会进行count查询 -->
            <property name="rowBoundsWithCount" value="true"/>
            <!-- 设置为true时,如果pageSize=0或者RowBounds.limit = 0就会查询出全部的结果 -->
            <!-- (相当于没有执行分页查询,但是返回结果仍然是Page类型)-->
            <property name="pageSizeZero" value="true"/>
            <!-- 3.3.0版本可用 - 分页参数合理化,默认false禁用 -->
            <!-- 启用合理化时,如果pageNum<1会查询第一页,如果pageNum>pages会查询最后一页 -->
            <!-- 禁用合理化时,如果pageNum<1或pageNum>pages会返回空数据 -->
            <property name="reasonable" value="false"/>
            <!-- 3.5.0版本可用 - 为了支持startPage(Object params)方法 -->
            <!-- 增加了一个`params`参数来配置参数映射,用于从Map或ServletRequest中取值 -->
            <!-- 可以配置pageNum,pageSize,count,pageSizeZero,reasonable,orderBy,不配置映射的用默认值 -->
            <!-- 不理解该含义的前提下,不要随便复制该配置 -->
            <property name="params" value="pageNum=pageHelperStart;pageSize=pageHelperRows;"/>
            <!-- 支持通过Mapper接口参数来传递分页参数 -->
            <property name="supportMethodsArguments" value="false"/>
            <!-- always总是返回PageInfo类型,check检查返回类型是否为PageInfo,none返回Page -->
            <property name="returnPageInfo" value="none"/>
        </plugin>
    </plugins>

3、在controller中使用

@RequestMapping(value="/list" )
        public ModelAndView listBlog(){
            int pageNum = 1;
            if(request.getMethod().toLowerCase().equals("post")){
                pageNum = Integer.valueOf(request.getParameter("pageNum"));
            }
            //获取第1页,10条内容,默认查询总数count
            PageHelper.startPage(pageNum , 1);
            List<Blog> list =blogServiceImpl.getBlogList();
            PageInfo page = new PageInfo(list);
            Map<String, Object> map = new HashMap<String, Object>();
            map.put("page",page);
            map.put("list",list);
            map.put("url",request.getRequestURI());
            ModelAndView mav = new ModelAndView("blog_list");
            mav.addAllObjects(map);
            return mav;
        }

4、前台页面显示

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<script type="text/javascript">
    function submit(pageNum){
        var form = document.createElement("form");
        form.action = '${url}';
        form.method = "post";
        form.style.display = "none";

        var pageNumEle = document.createElement("input");
        pageNumEle.name = "pageNum";
        pageNumEle.value = pageNum;
        form.appendChild(pageNumEle);

        document.body.appendChild(form);
        form.submit();
    }
    function goWitch(input){
        var pageNum = input.value;
        if(pageNum==null||pageNum==""){
            alert("请输入页码!!!");
            return;
        }
        if(!pageNum.match("\\d+")){
            alert("请输入数字!!!");
            return;
        }
        if(pageNum<1 || pageNum > ${page.pages} ){
            alert("无效的页码!!!");
            input.value="";
            return;
        }

        submit(pageNum);
    }
</script>

当前第[${page.pageNum}]页
&nbsp;&nbsp;
<a href="javascript:submit('1')">首页</a>
&nbsp;
<c:if test="${page.pageNum>1 }">
    <a href="javascript:submit('${page.pageNum-1}')">上一页</a>
</c:if>

<c:forEach begin="${page.firstPage}" end="${page.lastPage}" var="pageNum">
    [<a href="javascript:submit('${pageNum}')">${pageNum }</a>]
</c:forEach>
&nbsp;
<c:if test="${page.pageNum<page.pages}">
    <a href="javascript:submit('${page.pageNum+1}')">下一页</a>
</c:if>
&nbsp;
<a href="javascript:submit('${page.pages}')">尾页</a>
&nbsp;&nbsp;
共 [${page.pageNum}]页,共[${page.total}]条记录

&nbsp;
<input type="text" id="pagenum" style="width: 30px">
&nbsp;
<input type="button" style="width: 40px" onclick="goWitch(document.getElementById('pagenum'))" value=" GO ">

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值