思路
分两次查询。
一次是查分页数据,一次是查总数量。
sql
核心是 limit start,size
SELECT
e.*,
d.name AS department_name,
c.name AS work_city_name,
c2.name AS company_name
FROM
employee e,
department d,
city c,
company c2
WHERE
(e.department_id = d.id) //关联部门表,就可以查询得到部门表的所有字段
AND (e.work_city_id = c.id) //同上
AND (e.company_id = c2.id)
ORDER BY e.id ASC
LIMIT 0,10 //sql里面的是start和size
源码
controller //核心是前端传入的参数1.第几页page 2.页大小pageSize
@RequestMapping(value="/page",method=RequestMethod.GET)
public Map<String,Object> getEmployeesByPage(
@RequestParam(defaultValue = "1") Integer page,
@RequestParam(defaultValue = "10") Integer pageSize,
@RequestParam(defaultValue = "") String keyword,
Long companyId, Long departmentId,Long workCityId, Long positionId,Integer workStatus
){
List<Employee> employees = employeeService.getEmployeesByPage(page, pageSize, keyword,companyId, departmentId, workCityId, positionId, workStatus);
Long count = employeeService.getCount();
Map<String,Object> map = new HashMap<>();
map.put("employees", employees);
map.put("count", count);
return map;
}
service//核心是:根据第几页,计算得到起始索引。计算公式是:int start = (page - 1) * pageSize
public List<Employee2> getEmployeeByPage(Integer page, Integer size, String keywords, Long politicId, Long nationId, Long posId, Long jobLevelId, String engageForm, Long departmentId, String beginDateScope) {
int start = (page - 1) * size; //前台传的是page,后台计算得到start,最后给到sql的start
Date startBeginDate = null;
Date endBeginDate = null;
if (beginDateScope != null && beginDateScope.contains(",")) {
try {
String[] split = beginDateScope.split(",");
startBeginDate = birthdayFormat.parse(split[0]);
endBeginDate = birthdayFormat.parse(split[1]);
} catch (ParseException e) {
}
}
return empMapper.getEmployeeByPage(start, size, keywords, politicId, nationId, posId, jobLevelId, engageForm, departmentId, startBeginDate, endBeginDate);
}
```