mybatis-plus实现多条件组合查询带分页功能.附上详细代码
如上图所⽰,假设前端页⾯上显⽰的是⼀个讲师数据列表,其中包括了⾸页,上⼀页,下⼀页等等.前端展⽰虽然挺明了的,但是后端的数据库是怎么实现按条件调出json格式的数据呢.这就是⼀个令⼈头疼的问题了.但是问题还是需要解决的,所以我们应该这么做.
第⼀步:把条件值传递到接⼝中
把条件值封装到对象⾥⾯,再把对象传递到接⼝⾥⾯.
所以建⼀个实体类,专门⽤于存条件的属性.
package com.ity.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
分页查询插件
@Data
public class TeacherQuery {
@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;
}
然后在控制器中去编写逻辑代码.
//4.条件查询带分页
@GetMapping("pageTeacherCondition/{current}/{limit}")
public R pageTeacherCondition(@PathVariable long current,
@PathVariable long limit,
TeacherQuery teacherQuery){
//创建⼀个page对象
Page<EduTeacher> pageTeacher =new Page<>();
//构建条件
QueryWrapper<EduTeacher> queryWrapper =new QueryWrapper<>();
//多条件组合查询,mybatis学过动态sql
String name = Name();
Integer level = Level();
String begin = Begin();
String end = End();
//判断条件值是否为空,如果不为空,拼接条件
if(!StringUtils.isEmpty(name)){
queryWrapper.like("name",name);
}
if(!StringUtils.isEmpty(level)){
queryWrapper.eq("level",level);
}
if(!StringUtils.isEmpty(begin)){
<("gmt_create",begin);//这⾥加的是表中的字段名称,ge ⼤于等于}
if(!StringUtils.isEmpty(end)){
queryWrapper.le("gmt_create",end);//le ⼩于等于
}
//调⽤⽅法实现条件分页查询
teacherService.page(pageTeacher,queryWrapper);
long total = Total();//总记录数
//⽅式⼀
List<EduTeacher> records = Records();//数据list的集合
Map map =new HashMap<>();
map.put("total",total);
map.put("rows",records);
return R.ok().data(map);
}
进⾏⼀个接⼝的测试:
注意⼀个问题:
responseBody
返回数据,返回json数据
requestBody
使⽤json来传递数据,把json数据封装到对应对象⾥⾯如:前端传来的数据,会变成json格式封装到对象中
注意:如果后端传对象使⽤了requestBody注解,就需要使⽤post提交⽅式
由于前端的条件值可以都不设置,所以在requestBody中需要加上required=false.表⽰这个值可以没有
完整的controller代码:
/
/4.条件查询带分页
@PostMapping("pageTeacherCondition/{current}/{limit}")
public R pageTeacherCondition(@PathVariable long current,
@PathVariable long limit,
@RequestBody(required =false) TeacherQuery teacherQuery){ //创建⼀个page对象
Page<EduTeacher> pageTeacher =new Page<>(current,limit);
//构建条件
QueryWrapper<EduTeacher> queryWrapper =new QueryWrapper<>();
//多条件组合查询,mybatis学过动态sql
String name = Name();
Integer level = Level();
String begin = Begin();
String end = End();
//判断条件值是否为空,如果不为空,拼接条件
if(!StringUtils.isEmpty(name)){
queryWrapper.like("name",name);
}
if(!StringUtils.isEmpty(level)){
queryWrapper.eq("level",level);
}
if(!StringUtils.isEmpty(begin)){
<("gmt_create",begin);//这⾥加的是表中的字段名称,ge ⼤于等于}
if(!StringUtils.isEmpty(end)){
queryWrapper.le("gmt_create",end);//le ⼩于等于
}
//调⽤⽅法实现条件分页查询
teacherService.page(pageTeacher,queryWrapper);
long total = Total();//总记录数
//⽅式⼀
List<EduTeacher> records = Records();//数据list的集合
Map map =new HashMap<>();
map.put("total",total);
map.put("rows",records);
return R.ok().data(map);
}
这样修改之后我们来看看swagger的变化

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。