谷粒 | 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>

posted @ 2021-02-14 21:03  至安  阅读(155)  评论(0)    收藏  举报