分页查询的数据模型

一、数据模型及思路

1.数据模型

  1. 服务器向客户端响应的数据格式我们使用Result类封装。
  2. 客户端向服务器传输三个数据:当前页数每页条数搜索条件
  3. 服务器向客户端传输两个数据:总条数当前页的结果

2. 思路:

  1. Controller:获取请求参数封装到QueryPageBean对象;调用业务层方法将queryPageBean作为参数传递;使用Result封装响应数据。
  2. service:调用dao层方法查找两个数据:总条数当前页的数据集合;将数据封装到响应数据模型并返回。

二、后端代码

1. pojo类

#响应参数的数据模型
@Data
@AllAtgsConstructor
@NoAtgsConstructor
public class Result implements Serializable {
	private Boolean flag;
	private String message;
	private Object result;
}

#分页数据的数据模型
@Data
@AllArgsConstructor
@NoArgsConstructor
public class PageResult implements Serializable {
    private Long total; // 总条数
    private List rows; // 当前页的结果
}

#请求参数的数据模型
@Data
@AllArgsConstructor
@NoArgsConstructor
public class QueryPageBean implements Serializable {
    private Integer currentPage; // 当前页数
    private Integer pageSize; // 每页条数
    private Map queryParams; // 查询条件

    // 这个是用于dao层进行分页查询时候,要跳过的数据条数
    private Integer offset; // 分页查询,开始记录下标

    /**
     * 获取分页其实记录位置
     * 根据分页页数,计算limit起始记录
     * @return
     */
    public Integer getOffset() {
        return (currentPage - 1) * pageSize;
    }
}

2. 服务器响应

#Controller
@RequestMapping("/course/findByPage")
public void findByPage(HttpServletRequest request, HttpServletResponse response) throws IOException {
    try {
        // 1. 获取客户端请求参数,封装到QueryPageBean对象
        QueryPageBean queryPageBean = JsonUtils.parseJSON2Object(request, QueryPageBean.class);
        // 2. 调用业务层的方法,返回PageResult对象
        PageResult pageResult = courseService.findByPage(queryPageBean);
        // 3. 将pageResult封装到result对象,响应到客户端
        JsonUtils.printResult(response, new Result(true, "查询学科信息成功", pageResult));
    } catch (Exception e) {
        e.printStackTrace();
        // 失败将信息响应到客户端
        JsonUtils.printResult(response, new Result(false, "查询学科信息失败", null));
    }
}

#Service
public PageResult findByPage(QueryPageBean queryPageBean) throws IOException {
    SqlSession sqlSession = SqlSessionFactoryUtils.openSqlSession();
    CourseDao courseDao = sqlSession.getMapper(CourseDao.class);
    // 1. 调用dao层的方法,查询总数据条数
    Long total = courseDao.findTotalCount(queryPageBean);
    // 2. 调用dao层的方法,查询当前页的数据集合
    List<Course> courseList = courseDao.findPageList(queryPageBean);
    // 3. 将总条数和当前页的数据集合封装到PageResult对象
    PageResult pageResult = new PageResult(total, courseList);
    SqlSessionFactoryUtils.commitAndClose(sqlSession);
    return pageResult;
}

#dao
    /**
     * 根据条件查询学科的总条数
     * @param queryPageBean
     * @return
     */
    Long findTotalCount(QueryPageBean queryPageBean);
    /**
     * 查询当前页的数据集合
     * @param queryPageBean
     * @return
     */
    List<Course> findPageList(QueryPageBean queryPageBean);

三、总结

  1. 关联表的查询多采用嵌套查询来实现。
  2. 因为客户端的数据有查询条件存在,所以在查询时需使用if_where来实现相关的判断操作。
  3. 在请求参数模型中已明确给出limit方法的参数,可以直接使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值