谷粒 | 14 |后端课程模块接口
此节没有技术难点,重点在于如何实现表之间的关联
1、用代码生成器生成课程相关接口
之前已经配置好代码生成器,现在只需要添加映射表名
//一次可映射多个表
strategy.setInclude("edu_course","edu_course_description","edu_video","edu_chapter");
2、创建入参实体类 courseInfoVo
入参不需要课程实体类的所有信息,所以创建一个入参实体类专门接受入参
3、控制层
@Api(description = "课程控制器")
@RestController
@RequestMapping("/eduservice/course")
@CrossOrigin
public class EduCourseController {
@Autowired
private EduCourseService courseService;
@ApiOperation(value = "添加课程信息")
@PostMapping("addCourseInfo")
public Result addCourseInfo(
@ApiParam(name = "courseInfoVo",value = "课程基本信息")
@RequestBody CourseInfoVo courseInfoVo){
//返回课程id供创建课程大纲时使用
String id = courseService.saveCourseInfo(courseInfoVo);
return Result.ok().data("courseId",id);
}
@ApiOperation(value = "根据课程id查询课程信息")
@GetMapping("getCourseInfo/{courseId}")
public Result getCourseInfo(@PathVariable("courseId") String courseId) {
CourseInfoVo courseInfoVo = courseService.getCourseInfo(courseId);
return Result.ok().data("courseInfoVo",courseInfoVo);
}
@ApiOperation(value = "修改课程信息")
@PostMapping("updateCourseInfo")
public Result updateCourseInfo(@RequestBody CourseInfoVo courseInfoVo) {
courseService.updateCourseInfo(courseInfoVo);
return Result.ok();
}
@ApiOperation("查询课程发布信息")
@GetMapping("getPublishCourseInfo/{id}")
public Result getPublishCourseInfo(@PathVariable("id") String id){
CoursePublishRes coursePublishRes = courseService.getPublishCourseInfo(id);
return Result.ok().data("coursePublish",coursePublishRes);
}
}
4、业务层及实现类
@Service
public class EduCourseServiceImpl extends ServiceImpl<EduCourseMapper, EduCourse> implements EduCourseService {
/*
当需要使用其他service接口时需要在此引入
*/
@Autowired
private EduCourseDescriptionService courseDescriptionService;
/**
* 添加课程信息存入课程表,同时将描述信息存入课程描述表
* @param courseInfoVo
* @return
*/
@Override
public String saveCourseInfo(CourseInfoVo courseInfoVo) {
EduCourse eduCourse = new EduCourse();
//复制属性
BeanUtils.copyProperties(courseInfoVo,eduCourse);
//将课程信息存入课程表
int insertNums = baseMapper.insert(eduCourse); //insertNums表示影响行数
if (insertNums == 0) {
throw new MyException(20001,"添加课程信息失败");
}
//获取课程id
String cid = eduCourse.getId();
//获取课程描述信息,课程与课程描述:1对1关系
EduCourseDescription eduCourseDescription = new EduCourseDescription();
eduCourseDescription.setDescription(courseInfoVo.getDescription());
/*
将课程id赋给课程描述id,使其成为1对1关系,
此步骤是将课程表和描述表关联起来的关键
*/
eduCourseDescription.setId(cid);
//存入课程描述信息
courseDescriptionService.save(eduCourseDescription);
return cid;
}
@Override
public CourseInfoVo getCourseInfo(String courseId) {
//查询课程信息
EduCourse eduCourse = baseMapper.selectById(courseId);
CourseInfoVo courseInfoVo = new CourseInfoVo();
BeanUtils.copyProperties(eduCourse,courseInfoVo);
//查询课程描述
EduCourseDescription courseDescription = courseDescriptionService.getById(courseId);
courseInfoVo.setDescription(courseDescription.getDescription());
return courseInfoVo;
}
@Override
public void updateCourseInfo(CourseInfoVo courseInfoVo) {
//修改课程信息
EduCourse eduCourse = new EduCourse();
BeanUtils.copyProperties(courseInfoVo,eduCourse);
int updateNum = baseMapper.updateById(eduCourse);
if (updateNum == 0) {
throw new MyException(20001,"修改课程信息失败");
}
//修改课程描述信息
EduCourseDescription courseDescription = new EduCourseDescription();
String cid = courseInfoVo.getId();
String description = courseInfoVo.getDescription();
courseDescription.setId(cid);
courseDescription.setDescription(description);
boolean flag = courseDescriptionService.updateById(courseDescription);
if (!flag) {
throw new MyException(20001,"修改课程描述信息失败");
}
}
@Override
public CoursePublishRes getPublishCourseInfo(String courseId) {
//调用自定义的mapper接口方法
CoursePublishRes publishCourseInfo = baseMapper.getPublishCourseInfo(courseId);
return publishCourseInfo;
}
}
5、mapper接口
若业务涉及多张表而且sql语句比较复杂,需要自己写sql
MP代码生成器xml文件在java包下,不会自动编译
public interface EduCourseMapper extends BaseMapper<EduCourse> {
/**
* 查询课程发布信息
*/
public CoursePublishRes getPublishCourseInfo(String courseId);
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.birdy.eduservice.mapper.EduCourseMapper">
<!--
id:绑定mapper接口方法名
resultType:自定义返回结果实体类
-->
<select id="getPublishCourseInfo" resultType="com.birdy.eduservice.entity.vo.CoursePublishRes">
SELECT
ec.id,
ec.title,
ec.price,
ec.lesson_num AS lessonNum,
ec.cover,
et.NAME AS teacherName,
es1.title AS subjectLevelOne,
es2.title AS subjectLevelTwo
FROM
edu_course ec
LEFT JOIN edu_course_description ecd ON ec.id = ecd.id
LEFT JOIN edu_teacher et ON et.id = ec.teacher_id
LEFT JOIN edu_subject es1 ON ec.subject_parent_id = es1.id
LEFT JOIN edu_subject es2 ON ec.subject_id = es2.id
WHERE
ec.id = #{courseId}
</select>
</mapper>

浙公网安备 33010602011771号