注:在本子模块下,建立一个配置类(存放所有的配置):
先创建个包config(存储所有的配置类),再创建mp的配置类:MpConfig
添加一个@Configuration,再把配置放进去。再把启动类中的中的@MapperScan(“com.zpc.myplus02.mapper”)添加过来
插入插件:
@Configuration //这是必备,说明这是一个配置类
@MapperScan("com.zpc.eduservice.mapper") //用来扫描,调用mapper,也可放在启动类
public class EduConfig {
/**
* 逻辑删除插件
*/
@Bean
public ISqlInjector sqlInjector() {
return new LogicSqlInjector();
}
/**
* 分页插件
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
}
一:创建个vo包,在entity下,先定义一个vo对象(创建个类),用来弄查询的条件类型
@ApiModel(value = "Teacher查询对象", description = "讲师查询对象封装")
@Data
public class TeacherQuery implements Serializable {
//Serializable是一个空接口,没有什么具体内容,它的目的只是简单的标识一个类的对象可以被序列化
//比如过你要将某个特定的对象保存到文件中,我隔几天在把它拿出来用,那么这时候就要实现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;
}
逻辑
//该查询新定义实体类,用以条件TeacherQuery
//条件分页查询
@ApiOperation(value = "条件分页查询")
@PostMapping("pageTeacherCondition/{current}/{limit}") //@PostMapping和@GetMapping意义上一样,不过@RequestBody必须使用@PostMapping
public R pageTeacherCondition(
@PathVariable long current,
@PathVariable long limit,
@RequestBody(required = false) TeacherQuery teacherQuery){
//这是引入那个teacherQuery,也就是引入条件 required = false表示不可为空
//@RequestBody,使用json传递数据,将json数据封装到对应对象,required表示其可以为空.@ResponseBody是返回json数据
//创建page对象
Page<EduTeacher> pageTeacher=new Page<>(current,limit);
//创建wrapper条件
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); //like是模糊查询,相当于'%输入的字%'
}
if (!StringUtils.isEmpty(level) ) {
wrapper.eq("level", level); //eq是等于
}
if (!StringUtils.isEmpty(begin)) {
wrapper.ge("gmt_create", begin); //ge是大于等于
}
if (!StringUtils.isEmpty(end)) {
wrapper.le("gmt_modified", end); //le是小于等于
}
//调用方法实现分页查询
teacherService.page(pageTeacher,wrapper);
long total=pageTeacher.getTotal(); //总记录数
List<EduTeacher> records= pageTeacher.getRecords(); //数据集合
return R.ok().data("total",total).data("rows",records);
}
创建Vo类
@Data
public class CourseFrontVo {
@ApiModelProperty(value = "课程名称")
private String title;
@ApiModelProperty(value = "讲师id")
private String teacherId;
@ApiModelProperty(value = "一级类别id")
private String subjectParentId;
@ApiModelProperty(value = "二级类别id")
private String subjectId;
@ApiModelProperty(value = "销量排序")
private String buyCountSort;
@ApiModelProperty(value = "最新时间排序")
private String gmtCreateSort;
@ApiModelProperty(value = "价格排序")
private String priceSort;
}
在countroller
@Autowired
private EduCourseService courseService;
//1 条件查询带分页查询课程,前台
@PostMapping("getFrontCourseList/{page}/{limit}")
public R getFrontCourseList(@PathVariable long page,@PathVariable long limit,
@RequestBody (required = false) CourseFrontVo courseFrontVo){
//创建page对象
Page<EduCourse> pageCourse=new Page<>(page,limit);
//创建wrapper条件
QueryWrapper<EduTeacher> wrapper=new QueryWrapper<>();
Map<String,Object> map = courseService.getCourseFrontList(pageCourse,courseFrontVo);
return R.ok().data(map);
}
实现类中
//1 条件查询带分页查询课程,前台
@Override
public Map<String, Object> getCourseFrontList(Page<EduCourse> pageCourse, CourseFrontVo courseFrontVo) {
//根据讲师id查询课程
QueryWrapper<EduCourse> wrapper=new QueryWrapper<>();
//取出所有值 与 判断条件值是否为空,不为空拼接 合一
if(!StringUtils.isEmpty(courseFrontVo.getSubjectParentId())) {
//一级分类
wrapper.eq("subject_parent_id",courseFrontVo.getSubjectParentId());
}
if(!StringUtils.isEmpty(courseFrontVo.getSubjectId())) {
//二级分类
wrapper.eq("subject_id",courseFrontVo.getSubjectId());
}
if(!StringUtils.isEmpty(courseFrontVo.getBuyCountSort())) {
//关注度(降序排列)
wrapper.orderByDesc("buy_count");
}
if(!StringUtils.isEmpty(courseFrontVo.getGmtCreateSort())) {
//最新(降序排列)
wrapper.orderByDesc("gmt_create");
}
if(!StringUtils.isEmpty(courseFrontVo.getPriceSort())) {
//价格(降序排列)
wrapper.orderByDesc("price");
}
//把条件添加进去到pageCourse(分页)中
baseMapper.selectPage(pageCourse,wrapper);
//创建一个list集合,将东西取出来 先 放到集合中,然后放到map集合中
List<EduCourse> records = pageCourse.getRecords();
long current = pageCourse.getCurrent();
long pages = pageCourse.getPages();
long size = pageCourse.getSize();
long total = pageCourse.getTotal();
boolean hasNext = pageCourse.hasNext();//下一页
boolean hasPrevious = pageCourse.hasPrevious();//上一页
//把分页数据获取出来,放到map集合
Map<String, Object> map = new HashMap<>();
map.put("items", records);
map.put("current", current);
map.put("pages", pages);
map.put("size", size);
map.put("total", total);
map.put("hasNext", hasNext);
map.put("hasPrevious", hasPrevious);
//map返回
return map;
}