一、数据模型及思路
1.数据模型
- 服务器向客户端响应的数据格式我们使用
Result
类封装。 - 客户端向服务器传输三个数据:
当前页数
、每页条数
、搜索条件
。 - 服务器向客户端传输两个数据:
总条数
、当前页的结果
。
2. 思路:
Controller
:获取请求参数封装到QueryPageBean
对象;调用业务层方法将queryPageBean
作为参数传递;使用Result
封装响应数据。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;
private Integer offset;
public Integer getOffset() {
return (currentPage - 1) * pageSize;
}
}
2. 服务器响应
#Controller
@RequestMapping("/course/findByPage")
public void findByPage(HttpServletRequest request, HttpServletResponse response) throws IOException {
try {
QueryPageBean queryPageBean = JsonUtils.parseJSON2Object(request, QueryPageBean.class);
PageResult pageResult = courseService.findByPage(queryPageBean);
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);
Long total = courseDao.findTotalCount(queryPageBean);
List<Course> courseList = courseDao.findPageList(queryPageBean);
PageResult pageResult = new PageResult(total, courseList);
SqlSessionFactoryUtils.commitAndClose(sqlSession);
return pageResult;
}
#dao
Long findTotalCount(QueryPageBean queryPageBean);
List<Course> findPageList(QueryPageBean queryPageBean);
三、总结
- 关联表的查询多采用嵌套查询来实现。
- 因为客户端的数据有查询条件存在,所以在查询时需使用
if_where
来实现相关的判断操作。 - 在请求参数模型中已明确给出
limit
方法的参数,可以直接使用。