/**
* 分页插件
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
2.1先创建page对象(mybatis plus的)
有两个参数page(当前页)和limit(该页有几条数据),
Page<EduTeacher> pageParam = new Page<>(page, limit);
2.2查询分页数据
page()方法也是已经封装好的方法,直接调用就行,第一个参数为上边定义的page对象,第二个为查询条件,没有条件为null
eduTeacherService.page(pageParam, null);
2.3获取总记录数和某页的所有数据集合
List<EduTeacher> records = pageParam.getRecords();//当前页的数据集合
long total = pageParam.getTotal();//总记录数
2.4完整代码
//分页查询方法
@ApiOperation(value = "分页讲师列表")
@GetMapping("{page}/{limit}")
public R pageList(
@ApiParam(name = "page", value = "当前页码", required = true)
@PathVariable Long page,
@ApiParam(name = "limit", value = "每页记录数", required = true)
@PathVariable Long limit){
Page<EduTeacher> pageParam = new Page<>(page, limit);
eduTeacherService.page(pageParam, null);
List<EduTeacher> records = pageParam.getRecords();
long total = pageParam.getTotal();
return R.ok().data("total", total).data("rows", records);
}
3.1理清思路
把条件传给对象,通过对象传给后端接口。
该课程是把条件重新封装成了一个对象。
根据条件创建条件类。
3.2创建条件类
@ApiModel(value = "Teacher查询对象", description = "讲师查询对象封装")
@Data
public class TeacherQuery {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "教师名称,模糊查询")
private String name;
@ApiModelProperty(value = "头衔 1高级讲师 2首席讲师")
private Integer level;
@ApiModelProperty(value = "查询开始时间", example = "2019-01-01 10:10:10")
private String begin;//注意,这里使用的是String类型,前端传过来的数据无需进行类型转换
@ApiModelProperty(value = "查询结束时间", example = "2019-12-01 10:10:10")
private String end;
}
3.3controller编写分页方法
3.3.1第三个参数为条件对象
@GetMapping("pageTeacherCondition/{current}/{limit}")
public R pageTeacherCondition(@PathVariable long current, @PathVariable long limit, TeacherQuery teacherQuery){
3.3.2创建page对象
Page<EduTeacher> pageParam = new Page<>(page, limit);
3.3.3创建QueryWrapper,用来设置条件
QueryWrapper<EduTeacher> wrapper = new QueryWrapper<>();
3.3.4判断条件是否为空
获得对象的值
String name = teacherQuery.getName();
String begin = teacherQuery.getBegin();
String end = teacherQuery.getEnd();
Integer level = teacherQuery.getLevel();
如果为空直接查询无条件,如果不为空添加条件进行查询。
StringUtils.isNullOrEmpty()
一个判dao断字符串是否du为空引用或者zhi值为空的方法。
能够判断dao一个String字符串是否是百空回引用(null),或值为空(empty),功能相当于string.IsNull()和string.Trim().Length总和。
if(!StringUtils.isNullOrEmpty(name)){
wrapper.like("name",name);
}
like()方法表示模糊查询,第一个参数是数据库中的表的列名,后边为条件值。
剩下三个方法类似。
if(!StringUtils.isNullOrEmpty(name)){
wrapper.like("name",name);//模糊查询
}
if(level!=null){
wrapper.eq("level", level);//等于
}
if(!StringUtils.isNullOrEmpty(begin)){
wrapper.ge("gmt_create", begin);//大于等于
}
if(!StringUtils.isNullOrEmpty(end)){
wrapper.le("gmt_create", end);//小于等于
}
完整方法
//条件分页查询
@GetMapping("pageTeacherCondition/{current}/{limit}")
public R pageTeacherCondition(@PathVariable long current, @PathVariable long limit, TeacherQuery teacherQuery){
Page<EduTeacher> pageParam = new Page<>(current, limit);
String name = teacherQuery.getName();
String begin = teacherQuery.getBegin();
String end = teacherQuery.getEnd();
Integer level = teacherQuery.getLevel();
//创建querywapper
QueryWrapper<EduTeacher> wrapper = new QueryWrapper<>();
if(!StringUtils.isNullOrEmpty(name)){
wrapper.like("name",name);
}
if(level!=null){
wrapper.eq("level", level);
}
if(!StringUtils.isNullOrEmpty(begin)){
wrapper.ge("gmt_create", begin);
}
if(!StringUtils.isNullOrEmpty(end)){
wrapper.le("gmt_create", end);
}
eduTeacherService.page(pageParam,wrapper);
List<EduTeacher> records = pageParam.getRecords();
long total = pageParam.getTotal();
return R.ok().data("total", total).data("rows", records);
}
测试方法
@RequestBody(required = false)
该注解是把参数以json类型传输
使用该注解需要使用@PostMapping
(required = false)
表示参数可以为空