开发者学堂课程【微服务+全栈在线教育实战项目演练(SpringCloud Alibaba+SpringBoot):后台讲师管理模块-条件查询(1)】学习笔记,与课程紧密连接,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/667/detail/11289
后台讲师管理模块-条件查询(1)
内容简介:
一、多条件组合查询带分页功能
二、怎样做多条件组合查询带分页功能
一、多条件组合查询带分页功能
1.怎样做分页功能?
首先画一个页面效果,假设在页面里有一个讲师数据列表,则列表就可以做一个分页。
分页一般在数据的最下面会有一个分页条,分页条一般有如下结构:
首页 上一页 1 2 3 下一页 尾页。
2.什么叫多条件查询?
根据条件做查询,一般在页面的上面会有输入条件的部分,例如:讲师名称、讲师级别、讲师入驻的开始时间、讲师入驻的结束时间,且这些条件可以选择和输入,在条件的后面也会有一个查询按钮,所以这是一个简单的页面效果,然而怎样做页面效果?
例如:输入一个姓张的讲师名称,查询姓张的所有讲师。或者在级别中输入高级,则就可以查出姓张的高级讲师。
以及讲师入驻的开始时间2019-1-1和讲师入驻的结束时间2019-1-31,点击查询,就可以利用这些条件,查出对应的讲师数据。多条件数据做到分页效果就称为多条件查询。
3.什么叫组合?
只查名称,没有级别和时间;只查名称和级别,没有时间;只查名称和开始时间,;
只查开始和结束时间,不查名称和级别。这些条件,都是不同的组合情况,称为多条件组合查询,然而在多条件组合查询的基础上,会加上分页这就是我们要做的多条件组合查询带分页功能。
二、怎样做多条件组合查询带分页功能
1.第一步:把条件值传递到接口里面(把条件值封装到对象里面,把对象vo传递到接口里面)
在代码 entity 中,建立 vo,在 vo 里创建一个类 TeacherQuery,让这个类TeacherQuery 用于封装条件。
(1)创建以后,根据条件在里面建立属性,用名称、级别、开始时间、结束时间创建四个属性做封装。例如:
@Date
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;
(2)条件查询带分页的方法:
@GetMapping( "pageTeacherCondition/{current)/(limit)" )
public R pageTeacherCondition (@PathVariable long current, @PathVariable long 1imit,
TeacherQuery teacherQuery) }
//创建 page 对象
Page<EduTeacher> pageTeacher = new Page<> (current, limit) :
//构建条件
QueryWrapper<EduTeacher> wrapper = new QueryWrapper<>() :
//多条件组合查询
//mybatis学过 动态sql
String name = teacherQuery. get.Name() :
Integer level = teacherQuery. getLevel() :
String begin = teacherQuery. getBegin() :
String end = teacherQuery. getEnd() :
//判断条件值是否为空,如果不为空拼接条件
if(!StringUtils. isEmpty(name)) {
//构建条件
wrapper. like( column: "name" , name) :
}
if(!StringUtils. isEmpty(1evel)) {
wrapper. eq(column: "level ", level) :
}
if(!StringUtils. isEmpty(begin)) {
wrapper. ge( column: "gmt_ create' , begin) :
}
if(!StringUtils. isEmpty(end)) {
wrapper. le( column: "gmt_ create" , end) :
}
//调用方法实现条件查询分页
teacherService. page (pageTeacher, wrapper) :
long total = pageTeacher. getTotal() : //总记录数
List<EduTeacher> records = pageTeacher. getRecords() : //数据list集合
return R. ok(). data( "total" , total). data( "rows" , records):
}
2.第二步:根据条件值进行判断,拼接条件
String name = teacherQuery. get.Name() :
Integer level = teacherQuery. getLevel() :
String begin = teacherQuery. getBegin() :
String end = teacherQuery. getEnd() :
//判断条件值是否为空,如果不为空拼接条件
if(!StringUtils. isEmpty(name)) {
//构建条件
wrapper. like( column: "name" , name) :
}
if(!StringUtils. isEmpty(1evel)) {
wrapper. eq(column: "level ", level) :
}
if(!StringUtils. isEmpty(begin)) {
wrapper. ge( column: "gmt_ create' , begin) :
}
if(!StringUtils. isEmpty(end)) {
wrapper. le( column: "gmt_ create" , end) :
}
- ResponseBody 的作用用于返回数据,返回 json 数据
- RequestBody 使用 json传递数据,把 json 数据封装到对应对象里面,若使用RequestBody,则需要使用 post 提交方式,@RequestBody (required = false) TeacherQuery teacherQuery表示参数值可以为空。
- 条件查询带分页的方法
@PostMapping ( "pageTeacherCondition/ {current}/{limit} ")
public R pageTeacherCondition(PathVariable long current, PathVariable long limit,
@RequestBody (required = false) TeacherQuery teacherQuery)