分页

249 阅读1分钟

思路

分两次查询。

一次是查分页数据,一次是查总数量。

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);
    }
    ```