SSM整合 分页

电玩女神 2024-04-17 05:54 132阅读 0赞

分页
1.准备
1.1 BasePage类  便于封装分页数据

  1. //分页工具类
  2. public class BasePage {
  3. //当前页
  4. private Integer currentPage = 0;
  5. //每页显示的条数
  6. private Integer pageSize = 5;
  7. public Integer getCurrentPage() {
  8. return currentPage;
  9. }
  10. public void setCurrentPage(Integer currentPage) {
  11. this.currentPage = currentPage;
  12. }
  13. public Integer getPageSize() {
  14. return pageSize;
  15. }
  16. public void setPageSize(Integer pageSize) {
  17. this.pageSize = pageSize;
  18. }

创建UserDto,并需要继承PageInfo类

  1. public class UserDto extends PageInfo<User>

1.2 前端分页栏  放在webapp文件夹下

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
  4. <div>
  5. 共有${ pageModel.total }条记录,共${ pageModel.pages }页,每页
  6. <select name="pageSize" onchange="changePageSize(this.value)" style="width: 50px;">
  7. <option value="10" ${ pageModel.pageSize==10?"selected":"" }>10</option>
  8. <option value="20" ${ pageModel.pageSize==20?"selected":"" }>20</option>
  9. <option value="50" ${ pageModel.pageSize==50?"selected":"" }>50</option>
  10. <option value="100" ${ pageModel.pageSize==100?"selected":"" }>100</option>
  11. </select>
  12. 条记录,当前${ pageModel.pageNum }/${ pageModel.pages }页,
  13. <a href="javascript:homePage()">首页</a>|
  14. <a href="javascript:frontPage()">上一页</a>|
  15. <a href="javascript:nextPage()">下一页</a>|
  16. <a href="javascript:lastPage()">尾页</a>|
  17. 转到<select name="pageNum" onchange="goPage(this.value)" style="width: 50px;">
  18. <c:forEach begin="1" end="${pageModel.pages }" var="i">
  19. <option value=${ i } ${ pageModel.pageNum==i?"selected":"" }>${ i }</option>
  20. </c:forEach>
  21. </select>
  22. </div>
  23. <script type="text/javascript">
  24. function homePage(){
  25. document.getElementById("pageNum").value=1;
  26. document.getElementById("pager").submit();//表单提交
  27. }
  28. function frontPage(){
  29. document.getElementById("pageNum").value=${ pageModel.pageNum<=1? 1 : pageModel.pageNum-1 };
  30. document.getElementById("pager").submit();//表单提交
  31. }
  32. function nextPage(){
  33. document.getElementById("pageNum").value=${ pageModel.pageNum>=pageModel.pages?pageModel.pages:pageModel.pageNum+1 };
  34. document.getElementById("pager").submit();//表单提交
  35. }
  36. function lastPage(){
  37. document.getElementById("pageNum").value=${ pageModel.pages };
  38. document.getElementById("pager").submit();//表单提交
  39. }
  40. function goPage(cur_page){
  41. document.getElementById("pageNum").value=cur_page;
  42. document.getElementById("pager").submit();//表单提交
  43. }
  44. function changePageSize(cur_pageSize){
  45. document.getElementById("pageSize").value=cur_pageSize;
  46. document.getElementById("pager").submit();//表单提交
  47. }
  48. </script>

1.3  前端页面

  1. <div class="pagin">
  2. <form action="/user/queryPage" method="post" id="pager">
  3. <input type="hidden" name="pageNum" id="pageNum" value="${pageModel.pageNum}">
  4. <input type="hidden" name="pageSize" id="pagSize" value="${pageModel.pageSize}">
  5. </form>
  6. <jsp:include page="/basePage.jsp"></jsp:include>
  7. </div>

2.后端请求实现
后端分页通过mybatis的分页插件PageHelper来实现,需要在mybatis的配置文件中添加分页拦截器

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
  3. <configuration>
  4. <plugins>
  5. <!-- com.github.pagehelper为PageHelper类所在包名 -->
  6. <plugin interceptor="com.github.pagehelper.PageHelper">
  7. <property name="dialect" value="mysql" />
  8. <!-- 该参数默认为false -->
  9. <!-- 设置为true时,会将RowBounds第一个参数offset当成pageNum页码使用 -->
  10. <!-- 和startPage中的pageNum效果一样 -->
  11. <property name="offsetAsPageNum" value="true" />
  12. <!-- 该参数默认为false -->
  13. <!-- 设置为true时,使用RowBounds分页会进行count查询 -->
  14. <property name="rowBoundsWithCount" value="true" />
  15. <!-- 设置为true时,如果pageSize=0或者RowBounds.limit = 0就会查询出全部的结果 -->
  16. <!-- (相当于没有执行分页查询,但是返回结果仍然是Page类型) -->
  17. <property name="pageSizeZero" value="true" />
  18. <!-- 3.3.0版本可用 - 分页参数合理化,默认false禁用 -->
  19. <!-- 启用合理化时,如果pageNum<1会查询第一页,如果pageNum>pages会查询最后一页 -->
  20. <!-- 禁用合理化时,如果pageNum<1或pageNum>pages会返回空数据 -->
  21. <property name="reasonable" value="false" />
  22. <!-- 3.5.0版本可用 - 为了支持startPage(Object params)方法 -->
  23. <!-- 增加了一个`params`参数来配置参数映射,用于从Map或ServletRequest中取值 -->
  24. <!-- 可以配置pageNum,pageSize,count,pageSizeZero,reasonable,不配置映射的用默认值 -->
  25. <!-- 不理解该含义的前提下,不要随便复制该配置 -->
  26. <property name="params" value="pageNum=start;pageSize=limit;" />
  27. <!-- always总是返回PageInfo类型,check检查返回类型是否为PageInfo,none返回Page -->
  28. <property name="returnPageInfo" value="check" />
  29. </plugin>
  30. </plugins>
  31. </configuration>

3.1  控制器

  1. @Autowired
  2. private IUserService userService;
  3. //分页查询用户信息 当期页 每页显示的条数
  4. @RequestMapping("/queryPage")
  5. public String queryPage(UserDto dto,Model m){
  6. //默认值
  7. if(dto != null){
  8. if( dto.getPageNum() == 0 && dto.getPageSize() == 0){
  9. dto.setPageNum(1);
  10. dto.setPageSize(5);
  11. }
  12. }
  13. PageInfo<User> info = userService.queryPage(dto);
  14. m.addAttribute("pageModel",info);
  15. return "user/user";//该处在视图解析器中,省略了 .jsp
  16. }

3.2 Service层实现

  1. //分页带条件查询用户信息
  2. PageInfo<User> queryPage(UserDto dto);
  3. @Override
  4. public PageInfo<User> queryPage(UserDto dto) {
  5. //设置分页的信息
  6. PageHelper.startPage(dto.getPageNum(),dto.getPageSize());
  7. List<User> list = this.query(dto.getUser());
  8. PageInfo<User> pageInfo = new PageInfo<User>(list);
  9. return pageInfo;
  10. }
  11. @Override
  12. //查询用户信息
  13. public List<User> query(User user) {
  14. UserExample example = new UserExample();
  15. if(user != null){
  16. Criteria criteria = example.createCriteria();
  17. if(StringUtils.isNotEmpty(user.getUserName())){
  18. //根据账号查询
  19. criteria.andUserNameEqualTo(user.getUserName());
  20. }
  21. }
  22. return userMapper.selectByExample(example);
  23. }

3.3  Dao层实现

  1. List<User> selectByExample(UserExample example);
  2. <select id="selectByExample" parameterType="com.i.pojo.UserExample" resultMap="BaseResultMap">
  3. select
  4. <if test="distinct">
  5. distinct
  6. </if>
  7. <include refid="Base_Column_List" />
  8. from t_user
  9. <if test="_parameter != null">
  10. <include refid="Example_Where_Clause" />
  11. </if>
  12. <if test="orderByClause != null">
  13. order by ${orderByClause}
  14. </if>
  15. </select>

4.测试
注意修改前端界面中获取数据的方式

  1. <c:forEach items="${pageModel.list}" var="user">
  2. <tr>
  3. <td><input name="" type="checkbox" value="" /></td>
  4. <td>${user.userId}</td>
  5. <td>${user.userName}</td>
  6. <td>${user.realName}</td>
  7. <td>${user.email}</td>
  8. <td>${user.phone}</td>
  9. <td><a href="/user/getAddOrUpdateInfo?userId=${user.userId}" class="tablelink">修改</a>
  10. <a href="javascript:void(0)" οnclick="deleteUser(${user.userId})" class="tablelink"> 删除</a></td>
  11. </tr>
  12. </c:forEach>

发表评论

表情:
评论列表 (有 0 条评论,132人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Layui + ssm

    做后台就会涉及到表格数据,当数据多的时候,就要使用分页来显示,这样就显得比较美观。分页确实有效,但它一定会加大系统的复杂度,如果数据量少的话可以不用分页,但是对于企业信息系统来

    相关 ssm查询

    引言:基于ssm框架下,利用Mybaits插件PageHelper进行分页查询,可以省去大量繁琐的代码,操作起来更为方便, 1、数据库表的设计 ![70][] ---