MybatisPlus实现分页
现在MybatisPlus的应用次数很多,自动生成以及封装了很多函数,今天记录下如何实现MybatisPlus下的分页。
条件查询的需求
按名称,头衔以及起始时间来查询
TeacherQuery用来封装条件查询
表示可以按名称,头衔以及起始时间来查询
// 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<EduTeacher> eduTeacherPage = new Page<>(page,limit); //用Mp中封装好的方法,声明一个Page,传入参数
teacherService.pageQuery(eduTeacherPage,teacherQuery);//teacherQuery是封装的条件查询对象
List<EduTeacher> 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 ServiceImpl<EduTeacherMapper, EduTeacher> implements TeacherService {
@Override
public void pageQuery(Page<EduTeacher> pageParam, TeacherQuery teacherQuery) {
QueryWrapper<EduTeacher> 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); //拿到查询条件调用分页方法
}
}
这就是完整的条件分页查询流程啦。