如上图所示,假设前端页面上显示的是一个讲师数据列表,其中包括了首页,上一页,下一页等等.前端展示虽然挺明了的,但是后端的数据库是怎么实现按条件调出json格式的数据呢.这就是一个令人头疼的问题了.但是问题还是需要解决的,所以我们应该这么做.
第一步:把条件值传递到接口中
把条件值封装到对象里面,再把对象传递到接口里面.
所以建一个实体类,专门用于存条件的属性.
package com.qiu.eduservice.entity.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 = teacherQuery.getName();
Integer level = teacherQuery.getLevel();
String begin = teacherQuery.getBegin();
String end = teacherQuery.getEnd();
//判断条件值是否为空,如果不为空,拼接条件
if (!StringUtils.isEmpty(name)){
queryWrapper.like("name",name);
}
if (!StringUtils.isEmpty(level)){
queryWrapper.eq("level",level);
}
if (!StringUtils.isEmpty(begin)){
queryWrapper.ge("gmt_create",begin);//这里加的是表中的字段名称,ge 大于等于
}
if (!StringUtils.isEmpty(end)){
queryWrapper.le("gmt_create",end);//le 小于等于
}
//调用方法实现条件分页查询
teacherService.page(pageTeacher,queryWrapper);
long total = pageTeacher.getTotal();//总记录数
//方式一
List<EduTeacher> records = pageTeacher.getRecords();//数据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.表示这个值可以没有
//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 = teacherQuery.getName();
Integer level = teacherQuery.getLevel();
String begin = teacherQuery.getBegin();
String end = teacherQuery.getEnd();
//判断条件值是否为空,如果不为空,拼接条件
if (!StringUtils.isEmpty(name)){
queryWrapper.like("name",name);
}
if (!StringUtils.isEmpty(level)){
queryWrapper.eq("level",level);
}
if (!StringUtils.isEmpty(begin)){
queryWrapper.ge("gmt_create",begin);//这里加的是表中的字段名称,ge 大于等于
}
if (!StringUtils.isEmpty(end)){
queryWrapper.le("gmt_create",end);//le 小于等于
}
//调用方法实现条件分页查询
teacherService.page(pageTeacher,queryWrapper);
long total = pageTeacher.getTotal();//总记录数
//方式一
List<EduTeacher> records = pageTeacher.getRecords();//数据list的集合
Map map = new HashMap<>();
map.put("total",total);
map.put("rows",records);
return R.ok().data(map);
}
这样修改之后我们来看看swagger的变化