springboot整合分页pagehelper

1.pom

              <!-- pagehelper -->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.2.5</version>
        </dependency>

2.1 pojo包中,分页返回结果类PageResult

import java.util.List;
/**
 * 分页返回结果
 */
public class PageResult {
    /**
     * 当前页码
     */
    private int pageNum;
    /**
     * 每页数量
     */
    private int pageSize;
    /**
     * 记录总数
     */
    private long totalSize;
    /**
     * 页码总数
     */
    private int totalPages;
    /**
     * 数据模型
     */
    private List<?> content;
    public int getPageNum() {
        return pageNum;
    }
    public void setPageNum(int pageNum) {
        this.pageNum = pageNum;
    }
    public int getPageSize() {
        return pageSize;
    }
    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }
    public long getTotalSize() {
        return totalSize;
    }
    public void setTotalSize(long totalSize) {
        this.totalSize = totalSize;
    }
    public int getTotalPages() {
        return totalPages;
    }
    public void setTotalPages(int totalPages) {
        this.totalPages = totalPages;
    }
    public List<?> getContent() {
        return content;
    }
    public void setContent(List<?> content) {
        this.content = content;
    }
}

2.2 pojo包中,将分页信息封装到统一的接口PageUtils

import com.github.pagehelper.PageInfo;

public class PageUtils {
    /**
     * 将分页信息封装到统一的接口
     * @param pageNum
     * @param pageSize
     * @param pageInfo
     * @return
     */
    public static PageResult getPageResult(int pageNum, int pageSize, PageInfo<?> pageInfo) {
        PageResult pageResult = new PageResult();
        pageResult.setPageNum(pageNum);
        pageResult.setPageSize(pageSize);
        pageResult.setTotalSize(pageInfo.getTotal());
        pageResult.setTotalPages(pageInfo.getPages());
        pageResult.setContent(pageInfo.getList());
        return pageResult;
    }
}

3.FoodMapper.java接口--和之前查询一样

List<Food> selectList(Map map);

4.FoodMapper.xml映射文件--和之前查询一样

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.elm.elmbootrj01.mapper.FoodMapper" >
  <resultMap id="FoodResultMap" type="Food" >
    <id column="foodId" property="foodId" jdbcType="INTEGER" />
    <result column="foodName" property="foodName" jdbcType="VARCHAR" />
    <result column="foodExplain" property="foodExplain" jdbcType="VARCHAR" />
    <result column="foodPrice" property="foodPrice" jdbcType="DECIMAL" />
    <result column="businessId" property="businessId" jdbcType="INTEGER" />
  </resultMap>
  <sql id="Food_Column_List" >
    foodId, foodName, foodExplain, foodPrice, businessId
  </sql>
  <select id="selectList" resultMap="FoodResultMap">
    select
    <include refid="Food_Column_List" />
    from food
    <trim prefix="where" prefixOverrides="AND|OR">
      <if test="foodName!=null and foodName!=''">
        AND foodName like '%${foodName}%'
      </if>
      <if test="lowPrice!=null and lowPrice!=0">
        AND foodPrice  &gt;= #{lowPrice}
      </if>
      <if test="highPrice!=null and highPrice!=0">
        AND foodPrice  &lt;= #{highPrice}
      </if>
    </trim>
  </select>

</mapper>

5.重点在业务层处理分页

5.1 业务接口

/**
     * 分页查询接口
     * 这里统一封装了分页请求和结果,避免直接引入具体框架的分页对象, 如MyBatis或JPA的分页对象
     * 从而避免因为替换ORM框架而导致服务层、控制层的分页接口也需要变动的情况,替换ORM框架也不会
     * 影响服务层以上的分页接口,起到了解耦的作用
     * @param  pageNum,pageSize 自定义,统一分页查询请求
     * @return PageResult 自定义,统一分页查询结果
     */
    PageResult findPage(int pageNum, int pageSize, Map map);

5.2 业务层实现类

 @Override
    public PageResult findPage(int pageNum, int pageSize, Map map) {
        return PageUtils.getPageResult(pageNum,pageSize, getPageInfo(pageNum,pageSize,map));
    }
    /**
     * 调用分页插件完成分页
     * @param pageNum,pageSize,map
     * @return
     */
    private PageInfo<Food> getPageInfo(int pageNum,int pageSize,Map map) {
        PageHelper.startPage(pageNum, pageSize);
        List<Food> foodList = foodMapper.selectList(map);
        return new PageInfo<Food>(foodList);
    }

6.controller

6.1 返回json格式字符串

@RequestMapping(value="/findPageJson")
    public @ResponseBody  Object findPageJson(@RequestParam("pageNum")Integer pageNum,//页码
                                              @RequestParam("pageSize")Integer pageSize,//页大小
                                              Map map) {//map为多条件查询参数
        return foodService.findPage(pageNum,pageSize,map);
    }

6.2 返回分页结果到jsp

@RequestMapping(value="/findPageToJsp")
    public String findPageToJsp(Model model,@RequestParam("pageNum")Integer pageNum,
                                @RequestParam("pageSize")Integer pageSize,
                                Map map) {
        model.addAttribute("pageData",foodService.findPage(pageNum,pageSize,map));
        return "food/listPage";
    }

7. jsp页面

listPage.jsp


image.png
<p>
        共${pageData.totalPages}页&nbsp;&nbsp;第${pageData.pageNum}页&nbsp;&nbsp;
        <c:if test="${pageData.pageNum-1>0}">
        <a href="${pageContext.request.contextPath }/FoodController/findPageToJsp?pageSize=5&pageNum=${pageData.pageNum-1}">上一页</a>&nbsp;&nbsp;
        </c:if>
        <c:if test="${pageData.pageNum+1<=pageData.totalPages}">
        <a href="${pageContext.request.contextPath }/FoodController/findPageToJsp?pageSize=5&pageNum=${pageData.pageNum+1}">下一页</a>
        </c:if>
    </p>

8.测试

8.1 测试获取json格式的数据


image.png

8.2 jsp页面测试


image.png
image.png

image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容