数据库的表:
edu_teacher及其对应的实体类
edu_subject及其对应的实体类
@Data//自动生成get和set方法
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ApiModel(value="EduTeacher对象", description="讲师")
public class EduTeacher implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "讲师ID")
@TableId(value = "id", type = IdType.ID_WORKER_STR)//使用雪花算法并且将算出来的id变成String的
private String id;
@ApiModelProperty(value = "讲师姓名")
private String name;
@ApiModelProperty(value = "讲师简介")
private String intro;
@ApiModelProperty(value = "讲师资历,一句话说明讲师")
private String career;
@ApiModelProperty(value = "头衔 1高级讲师 2首席讲师")
private Integer level;
@ApiModelProperty(value = "讲师头像")
private String avatar;
@ApiModelProperty(value = "排序")
private Integer sort;
@ApiModelProperty(value = "逻辑删除 1(true)已删除, 0(false)未删除")
@TableLogic//逻辑删除的注解
private Boolean isDeleted;
@ApiModelProperty(value = "创建时间")
@TableField(fill=FieldFill.INSERT)//自动填充
private Date gmtCreate;
@ApiModelProperty(value = "更新时间")
@TableField(fill=FieldFill.INSERT_UPDATE)//自动填充
private Date gmtModified;
}
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ApiModel(value="EduSubject对象", description="课程科目")
public class EduSubject implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "课程类别ID")
@TableId(value = "id", type = IdType.ID_WORKER_STR)
private String id;
@ApiModelProperty(value = "类别名称")
private String title;
@ApiModelProperty(value = "父ID")
private String parentId;
@ApiModelProperty(value = "排序字段")
private Integer sort;
@ApiModelProperty(value = "创建时间")
@TableField(fill= FieldFill.INSERT)
private Date gmtCreate;
@ApiModelProperty(value = "更新时间")
@TableField(fill= FieldFill.INSERT_UPDATE)
private Date gmtModified;
}
配置文件application.properties:
# 端口号 server.port=8001 spring.application.name=service-edu # 开发环境 spring.profiles.active=dev # mysql的配置 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/guli?serverTimezone=GMT%2B8 spring.datasource.username=root spring.datasource.password=root #json spring.jackson.date-format=yyyy-MM-dd HH:mm:ss spring.jackson.time-zone=GMT+8 #设置日志的等级 #logging.level.root=debug #mybatis的日志配置 #mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
maven依赖:
二.单表的增删改查功能 1.添加教师(需要前端上传一个Json格式的教师对象,不返回数据) //Controller层代码
@Autowired
private EduTeacherServiceImpl eduTeacherService;
@PostMapping("/addTeacher")
public R addTeacher(@RequestBody EduTeacher eduTeacher){
boolean b = eduTeacherService.save(eduTeacher);
if(b){
return R.ok();
}else{
return R.error();
}
}
//mapper和Service里面没有代码,save方法在BaseMapper里面封装好了
2.通过条件分页查询教师数据(需要页数和每页的记录数,返回查询的总数和查询的结果)
//Controller层代码
@PostMapping("/pageTeacherCondition/{current}/{limit}")
public R pageTeacherCondition(@PathVariable long current,
@PathVariable long limit,
@RequestBody(required=false) TeacherQuery teacherQuery){
Page pageTeacher = new Page<>(current,limit);//用于分页
QueryWrapper queryWrapper = new QueryWrapper<>();//用于设置查询的条件
//多条件组合查询,判断条件值是不是空,通过创建动态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);//≥
}
if(!StringUtils.isEmpty(end)){
queryWrapper.le("gmt_modified",end);//≤
}
queryWrapper.orderByDesc("gmt_create");
//进行查询
eduTeacherService.page(pageTeacher,queryWrapper);
long total = pageTeacher.getTotal();//获得pageTeacher对象中封装的总记录数
List records = pageTeacher.getRecords();//获得pageTeacher对象中封装的所有记录
return R.ok().data("total",total).data("items",records);
}
//这个是进行分页查询的条件封装的实体类
@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;
}
3.删除教师信息通过id(需要一个通过路径赋值的id,不返回数据)
//Controller层代码
@Autowired
private EduTeacherServiceImpl eduTeacherService;
@DeleteMapping("/{id}")
public R deleteteacher(@PathVariable String id){
boolean flag = eduTeacherService.removeById(id);
if(flag){
return R.ok();
}else{
return R.error();
}
}
//mapper和Service里面没有代码,removeById方法在BaseMapper里面封装好了
4.修改教师信息(需要前端上传一个Json格式的教师对象,不返回数据)
//Controller层代码
@Autowired
private EduTeacherServiceImpl eduTeacherService;
@PostMapping("/updateTeacher")
public R updateTeacher(@RequestBody EduTeacher eduTeacher){
boolean b = eduTeacherService.updateById(eduTeacher);
if(b){
return R.ok();
}else{
return R.error();
}
}
mapper和Service里面没有代码,removeById方法在updateById里面封装好了
5.查询所有的课程课程分类信息,然后在前端进行树状展示
将二类课程封装到一类课程里面(不需要数据,返回课程对象的List集合,在第一类课程类里添加以第二类课程为泛型的List集合,分别从数据库查出两个List集合,然后用BeanUtils进行封装就好)。
//这个是一级课程分类的实体类,每个一级实体类都含有多个二级课程分类的实体类
@Component
@Data
public class OneSubject {
//比如说,前端开发包含vue,JavaScript,node...
private String id;//这个是一级课程的id
private String title;
private List children=new ArrayList<>();
}
//这是二级课程分类的实体类
@Component
@Data
public class TwoSubject {
private String id;
private String title;
}
//Controller层代码
@Autowired
private EduSubjectService eduSubjectService;
@GetMapping("/getAllSubject")
public R getAllSubject(){
List subjects=eduSubjectService.getAllSubjects();
return R.ok().data("subjects",subjects);
}
//Service层代码
@Override
public List getAllSubjects() {
//查询所有的一级分类
QueryWrapper oneSubjectQueryWrapper = new QueryWrapper<>();
oneSubjectQueryWrapper.eq("parent_id","0");
List list = this.list(oneSubjectQueryWrapper);
//查询所有的二级分类
QueryWrapper twoSubjectQueryWrapper = new QueryWrapper<>();
twoSubjectQueryWrapper.ne("parent_id","0");
List list2 = this.list(twoSubjectQueryWrapper);
//创建标准返回结果对象
ArrayList onesubjects = new ArrayList<>();
//把二级分类插入到一级分类中
for (EduSubject Subject1 : list) {
OneSubject onesubject = new OneSubject();
BeanUtils.copyProperties(Subject1,onesubject);
onesubjects.add(onesubject);
String pid = Subject1.getId();
//拿二级分类去填一级分类的对象
for (EduSubject subject2 : list2) {
if(subject2.getParentId().equals(pid)){
TwoSubject twosubject = new TwoSubject();
BeanUtils.copyProperties(subject2,twosubject);
onesubject.getChildren().add(twosubject);
}
}
}
return onesubjects;
}
三.多表的增删改查功能



