- 条件查询的需求
- TeacherQuery用来封装条件查询
- Controller中调用
- serviceImpl接口实现类
现在MybatisPlus的应用次数很多,自动生成以及封装了很多函数,今天记录下如何实现MybatisPlus下的分页。
条件查询的需求按名称,头衔以及起始时间来查询
表示可以按名称,头衔以及起始时间来查询
// An highlighted block
@ApiModel(value = "Teacher查询对象", description = "讲师查询对象封装")
@Data
public class TeacherQuery implements Serializable {
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;
}
Controller中调用
这个pageQuery( )是在Service中定义的方法
// An highlighted block
//分页的条件查询方法
@PostMapping("{page}/{limit}") //page代表当前的页数,limit表示每页限定的条数
public R getPageTeacher(@PathVariable long page,
@PathVariable long limit, //TeacherQuery对象不是必须要传的,没有默认为查询全部
@RequestBody(required = false) TeacherQuery teacherQuery){
Page eduTeacherPage = new Page<>(page,limit); //用Mp中封装好的方法,声明一个Page,传入参数
teacherService.pageQuery(eduTeacherPage,teacherQuery);//teacherQuery是封装的条件查询对象
List teacherList = eduTeacherPage.getRecords(); //page对象service调用后才能拿到数据
long total = eduTeacherPage.getTotal(); //获取条数
return R.ok().data("TeacherList",teacherList).data("total",total);
}
serviceImpl接口实现类
如果这里不做非空判断,会出现查询张三,等级,起始时间为空的情况,导致查询结果为null
@Service public class TeacherServiceImpl extends ServiceImplimplements TeacherService { @Override public void pageQuery(Page pageParam, TeacherQuery teacherQuery) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.orderByDesc("gmt_create"); //按照字段降序 if(teacherQuery == null){ //如果传过来的查询条件为空就直接调用系统封装的分页方法 baseMapper.selectPage(pageParam, queryWrapper); return; } String name = teacherQuery.getName(); Integer level = teacherQuery.getLevel(); String begin = teacherQuery.getBegin(); String end = teacherQuery.getEnd(); if (!StringUtils.isEmpty(name)) { queryWrapper.like("name", name); //查询条件不为空则判断是否有name } if (!(level == null)) { queryWrapper.eq("level", level); //查询条件不为空则判断是否有等级 } if (!StringUtils.isEmpty(begin)) { queryWrapper.ge("gmt_create", begin); } if (!StringUtils.isEmpty(end)) { queryWrapper.le("gmt_create", end); } baseMapper.selectPage(pageParam, queryWrapper); //拿到查询条件调用分页方法 } }
这就是完整的条件分页查询流程啦。



