Day10-06.案例-员工管理-分页查询-分析
1.分页查询-需求:
1.分页查询语法:
参数1:起始索引 = (页码 - 1) * 每页展示记录数
参数2:查询返回的记录数 = 每页展示记录数
select * from emp limit 0, 5;
-- 查询第一页数据,每页展示五条记录
select * from emp limit 0, 5;
-- 查询第二页数据,每页展示五条记录
select * from emp limit 1, 5;
--查询第三页数据,每页展示五条记录
select * from emp limit 2, 5;
前端给后端传递的参数:
1.当前页码:page
2.每页展示记录数:pageSize
后端给前端返回的参数:
1.数据列表:List(select * from emp limit ?, ?;)
2.总记录数:total(select count(*) from emp;)
在定义一个实体类来封装返回结果,
@Data
public class PageBean{
private long total;//总记录数
private List rows;//当前页数据列表
}
2.每层完成的功能:
EmpController:
1.接收分页参数page,pageSize
2.调用Service进行分页查询,获取PageBean
3.响应
EmpService:
1.调用mapper接口查询总记录数total
2.调用mapper接口获取数据列表rows
3.封装PageBean对象,返回
EmpMapper:
1.select count(*) from emp;
2.select * from emp limit ?, ?;
@Slf4j
@RestController
public class EmpController {
@Autowired
private EmpService empService;
@GetMapping("/emps")
public Result page(@RequestParam(defaultValue = "1") Integer page,
@RequestParam(defaultValue = "10") Integer pageSize){
log.info("分页查询,参数:{}, {}", page, pageSize);
//调用Service分页查询
PageBean pageBean = empService.page(page, pageSize);
return Result.success(pageBean);
}
}
@Service
public class EmpServiceImpl implements EmpService {
@Autowired
private EmpMapper empMapper;
@Override
public PageBean page(Integer page, Integer pageSize) {
//获取总记录数
Long count = empMapper.count();
//获取分页查询结果列表
Integer start = (page - 1) * pageSize;
List<Emp> page1 = empMapper.page(start, pageSize);
//封装PageBean对象
PageBean pageBean = new PageBean(count, page1);
return pageBean;
}
}
public interface EmpService{
PageBean page(Integer page, Integer pageSize);
}
@Mapper
public interface EmpMapper {
// 查询总记录数
@Select("select count(*) from emp")
public Long count();
/*分页查询,获取列表数据*/
@Select("select * from emp limit #{start}, #{pageSize}")
public List<Emp> page(Integer start, Integer pageSize);
}
@RequestParam的属性defaultValue可以来设置参数的默认值。
3.小结:
1.分页查询:
1.请求参数:页码、每页展示记录数
2.响应结果:总记录数、结果列表(PageBean)
2.注解:
@RequestParam(defaultValue = “1”)//设置请求参数默认值