【精品】【精品】封装好的 通用的 先后端 分页技术 实例 #私藏项目实操分享#

2021年11月24日 阅读数:4
这篇文章主要向大家介绍【精品】【精品】封装好的 通用的 先后端 分页技术 实例 #私藏项目实操分享#,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

本博客中使用到的JsonUtil参看博客:Jackson工具类html

MyBatis 版

  • 使用分页插件:
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>5.3.0</version>
</dependency>
  • PageBeanjava

    @Getter
    @Setter
    @NoArgsConstructor
    @AllArgsConstructor
    public class PageBean<T> {
    /**
     * 每页显示的条数
     */
    private Integer pageSize = 10;
    
    /**
     * 当前的页码
     */
    private Integer current;
    
    /**
     * 一共有多少条记录
     */
    private Long total;
    
    /**
     * 一共有多少页
     */
    private Integer pages;
    
    /**
     * 每一页所显示的数据
     */
    private List<T> result;
    
    /**
     * 分页请求路径
     */
    private String url;
    
    @Override
    public String toString() {
        return  JsonUtil.obj2String(this);
    }
    
    /**
     * 将MyBatisPlus返回的IPage数据封装为自定义的PageBean
     *
     * @param page
     * @param <T>
     * @return
     */
    public static <T> PageBean<T> init(Page<T> page) {
        PageBean<T> pageBean = new PageBean<>();
        pageBean.setCurrent(page.getPageNum());
        pageBean.setPages(page.getPages());
        pageBean.setPages(page.getPages());
        pageBean.setTotal(page.getTotal());
        pageBean.setResult(page.getResult());
        return pageBean;
    }
    }

    MyBatisPlus版

    
    import com.baomidou.mybatisplus.core.metadata.IPage;
    import com.github.pagehelper.Page;
    import com.resume.utils.JsonUtil;
    import lombok.Getter;
    import lombok.Setter;

import java.util.List;git

/**github

  • 分页Bean
  • @param <T>
  • @author 梁云亮br/>*/
    @Setter
    @Getter
    public class PageBean<T> {
    /**markdown

    • 每页显示的条数
      */
      private Long size = 10L;

    /**mybatis

    • 当前的页码
      */
      private Long current;

    /**app

    • 一共有多少条记录
      */
      private Long total;

    /**jsp

    • 一共有多少页
      */
      private Long pages;

    /**ide

    • 每一页所显示的数据
      */
      private List<T> records;

    /**工具

    • 分页请求路径
      */
      private String url;

    /**

    • 将MyBatisPlus的IPage对象转换为自定义的PageBean对象
    • @param page
    • @return
      */
      public static <T> PageBean<T> init(IPage<T> page) {
      PageBean<T> pageBean = new PageBean<>();
      pageBean.setSize(page.getSize());
      pageBean.setCurrent(page.getCurrent());
      pageBean.setTotal(page.getTotal());
      pageBean.setPages(page.getPages());
      pageBean.setRecords(page.getRecords());
      return pageBean;
      }

    @Override
    public String toString() { //测试时使用
    return JsonUtil.obj2StringPretty(this);
    }
    }

控制器

@GetMapping("/getAllUser/{pageNum}/{pageSize}")
public ModelAndView getAllUser(
        @PathVariable("pageNum") Integer pageNum,
        @PathVariable("pageSize") Integer pageSize,
        ModelAndView mav){
    PageBean<User> pageBean = userService.selectPage(pageNum, pageSize);
    pageBean.setUrl("user/getAllUser");
    mav.addObject("pageBean",pageBean);
    mav.setViewName("user/list");
    return mav;
}

通用分页代码

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<ul class="pagination">
    <c:if test="${pageBean.pageNum <= 1}">
        <li class="disabled"><span>上一页</span></li>
    </c:if>
    <c:if test="${pageBean.pageNum > 1}">
        <li>
            <a rel="nofollow" href="${pageContext.request.contextPath}/${pageBean.url}/${pageBean.pageNum-1}/${pageSize}">上一页</a>
        </li>
    </c:if>
<%--    默认最多只能显示12个页码--%>
    <c:if test="${pageBean.pageNum <7}">
        <c:forEach begin="1" end="${12>pageBean.pages?pageBean.pages:12}" var="index">
            <c:if test="${pageBean.pageNum == index}">
                <li class="active"><span>${index}</span></li>
            </c:if>
            <c:if test="${pageBean.pageNum != index}">
                <li>
                    <a rel="nofollow" href="${pageContext.request.contextPath}/${pageBean.url}/${index}/${pageBean.pageSize}">${index}</a>
                </li>
            </c:if>
        </c:forEach>
    </c:if>
    <c:if test="${pageBean.pageNum >= 7}">
        <c:forEach begin="${pageBean.pageNum-6}" end="${pageBean.pages-pageBean.pageNum>5?pageBean.pageNum+5:pageBean.pages}" var="index">
            <c:if test="${pageBean.pageNum == index}">
                <li class="active"><span>${index}</span></li>
            </c:if>
            <c:if test="${pageBean.pageNum != index}">
                <li>
                    <a rel="nofollow" href="${pageContext.request.contextPath}/${pageBean.url}/${index}/${pageBean.pageSize}">${index}</a>
                </li>
            </c:if>
        </c:forEach>
    </c:if>

    <c:if test="${pageBean.pageNum >= pageBean.pages}">
        <li class="disabled"><span>下一页</span></li>
    </c:if>
    <c:if test="${pageBean.pageNum < pageBean.pages}">
        <li>
            <a rel="nofollow" href="${pageContext.request.contextPath}/${pageBean.url}/${pageBean.pageNum+1}/${pageBean.pageSize}">下一页</a>
        </li>
    </c:if>
</ul>

效果图

请添加图片描述