MyBatis分页插件PageHelper的使用

MySQL中的userinfo表数据

在这里插入图片描述

1. 将分页插件的jar包导入项目,添加Maven依赖配置,此处使用5.1.2版本

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

2. 在Mybatis配置文件(resources下的applicationContext.xml)中添加pagehelper插件配置(本文例子使用的数据库是mysql,故配置文件中写的是mysql)

<property name="plugins">
    <array>
        <bean class="com.github.pagehelper.PageInterceptor">
            <property name="properties">
                <props>
                    <prop key="helperDialect">mysql</prop>
                    <prop key="reasonable">true</prop>
                </props>
            </property>
        </bean>
    </array>
</property>

3. 在Controller类中设置启用分页并且获取分页结果,并跳转到user-list页面

此处为Controller类中查询所有用户的方法,方法中调用service层得到所有的List,然后创建PageInfo对象pageInfos,通过参数page和size将List进行分页,得到分页结果存在pageInfos中,其中参数page表示要显示的页面是第几页,size表示每页的记录条数。

@RequestMapping("findAll.do")
public ModelAndView findAll(@RequestParam(defaultValue = "1") int page, @RequestParam(defaultValue = "5") int size) {
    List<UserInfo> infos = userService.findAll(page, size);
    PageInfo pageInfos = new PageInfo(infos);
    ModelAndView mv = new ModelAndView();
    mv.addObject("pageInfos",pageInfos);
    mv.setViewName("user-list");
    return mv;
}

其中如下代码用来设置参数的默认值:

@RequestParam(defaultValue = "1") int page, @RequestParam(defaultValue = "5") int size

点击“用户管理”时页面会向controller类中启用分页的方法传递page和size参数。

<a
   href="${pageContext.request.contextPath}/user/findAll.do?page=1&size=5"> <i
      class="fa fa-circle-o"></i> 用户管理
</a>

controller类的RequestMapping为"user"。

4. 在页面的表格table中用foreach循环遍历pageInfos.list得到所有记录,每条记录后面均有更新和删除按钮

<c:forEach var="user" items="${pageInfos.list}">
   <tr>
      <td><input name="ids" type="checkbox"></td>
      <td>${user.id}</td>
      <td>${user.username}</td>
      <td>${user.password}</td>
      <td class="text-center">
         <a href="#" class="btn bg-olive btn-xs">更新</a>
         <a href="${pageContext.request.contextPath}/user/delUser.do?id=${user.id}" class="btn bg-olive btn-xs">删除</a>
      </td>
   </tr>
</c:forEach>

5. 将分页效果在页面中进行展示

<div class="box-tools pull-right">
   <ul class="pagination">
      <li><a href="${pageContext.request.contextPath}/user/findAll.do?page=1&size=5" aria-label="Previous">首页</a></li>
      <li><a href="${pageContext.request.contextPath}/user/findAll.do?page=${pageInfos.pageNum - 1}&size=5">上一页</a></li>
      <c:forEach begin="1" end="${pageInfos.pages}" var="pageNum">
         <li><a href="${pageContext.request.contextPath}/user/findAll.do?page=${pageNum}&size=5">${pageNum}</a></li>
      </c:forEach>
      <li><a href="${pageContext.request.contextPath}/user/findAll.do?page=${pageInfos.pageNum + 1}&size=5">下一页</a></li>
      <li><a href="${pageContext.request.contextPath}/user/findAll.do?page=${pageInfos.pages}&size=5" aria-label="Next">尾页</a></li>
   </ul>
</div>

其中的for循环用来使用户能够选择具体页码展示记录。

6. 最终效果图

在这里插入图片描述
在这里插入图片描述
插入一个用户,再删除一个用户,再插入一个用户之后:
在这里插入图片描述

7. 在controller类的启用分页的方法中需要设置参数默认值的原因

controller类中添加用户和删除用户的方法实现分别为:

@RequestMapping("addUser.do")
public String addUser(UserInfo userInfo) {	//添加用户
    userService.addUser(userInfo);
    return "redirect:/user/findAll.do";
}
@RequestMapping("delUser.do")
public String delUser(int id) {		//删除用户
    userService.delUser(id);
    return "redirect:/user/findAll.do";
}

这两个方法在执行完添加和删除操作之后重定向到"findAll.do",即启动分页的方法,未向该方法传递参数值,如果不设置默认值,则在执行添加和删除操作后返回用户列表时会出现如下异常:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值