谷粒学院项目实战36——多条件组合分页查询
实现如下图功能。
实现步骤如下。
(1)将查询条件传入接口。
一般把条件值封装成为一个对象,然后将封装对象(vo对象)传递到接口中。我们先在entity下建包vo,vo目录下创建TeacherQuery.java用于封装需要传递的数据。
@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;
}
(2)编写多条件查询功能
@PostMapping("pageTeacherCondition/{page}/{limit}")
public R pageTeacherCondition(
@ApiParam(name = "page", value = "当前页码", required = true) @PathVariable Long page,
@ApiParam(name = "limit", value = "每页记录数", required = true) @PathVariable Long limit,
@RequestBody(required = fals) TeacherQuery teacherQuery) {
Page<EduTeacher> teacherPage = new Page<>();
QueryWrapper<EduTeacher> wrapper = new QueryWrapper<>();
String name = teacherQuery.getName();
Integer level = teacherQuery.getLevel();
String begin = teacherQuery.getBegin();
String end = teacherQuery.getEnd();
if(!StringUtils.isEmpty(name)) {
wrapper.like("name", name);
}
//判断是否传入教师头衔
if (!StringUtils.isEmpty(level.toString())){
//构造条件
wrapper.eq("level",level);
}
if (!StringUtils.isEmpty(begin)){
//构造条件,注意这里的参数名称与数据库对应,而不是属性
wrapper.ge("gmt_create",begin);//ge:大于等于
}
if (!StringUtils.isEmpty(begin)){
//构造条件
wrapper.le("gmt_modified",end);//le:小于等于
}
eduTeacherService.page(teacherPage, wrapper);
Long total = teacherPage.getTotal();
List<EduTeacher> records = teacherPage.getRecords();
Map map = new HashMap<>();
map.put("total", total);
map.put("records", records);
return R.ok().data(map);
}
在上面传递参数时使用了@RequestBody
,该注解表示用json传参,将json数据封装到对象中,在实际开发中经常使用这个格式来传参,不过使用该注解需要配合@PostMapping
使用才能得到查询结果,另外需要显示表示参数值可以为空,否则必须传参。另外@ResponseBody
用于返回json数据。
java全栈日日学 文章被收录于专栏
java全栈每日必学,不要高估自己一年能做的事,不要低估自己十年能做的事