课程信息确认

image-20220111191850725

到目前为止,我们已经完成了上图的第1,2步,现在开始做第三步的功能:课程最终发布。要实现课程的最终发布,我们需要让用户确认添加的各个信息,因此我们需要先把这些信息查询到。要查询的数据包括:课程名称、课程价格、课程简介...这显然涉及到多张表。

设计到查询多张表的内容,我们一般有两种思路:

  • 封装PO类(适用表的数量较少的情况,之前就是这么处理的)
  • 编写复杂sql、

显然,咱们涉及的表的数量较多,编写sql语句进行多表查询。首先课程表的数据我们全部需要,另外如果有其它课程信息也需要查询,可以使用左外连接进行。

sql语句如下,注意where子句中的ec.id替换成自己的数据库中存在的id。

SELECT ec.id,ec.title,ec.price,ec.lesson_num,
			 ecd.description,
			 et.name,
			 es1.title AS oneSubject,
			 es2.title AS twoSubject
FROM edu_course ec
LEFT JOIN edu_course_description ecd ON ec.id=ecd.id
LEFT JOIN edu_teacher et ON ec.teacher_id=et.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='1'

接下来我们在com.wangzhou.eduservice.entity.vo下定义CoursePublishVO

@Data
public class CoursePublishVo implements Serializable {

    private static final long serialVersionUID = 1L;

    private String id;//课程id
    
    private String title; //课程名称

    private String cover; //封面

    private Integer lessonNum;//课时数

    private String subjectLevelOne;//一级分类

    private String subjectLevelTwo;//二级分类

    private String teacherName;//讲师名称

    private String price;//价格 ,只用于显示

}

com.wangzhou.eduservice.mapper。

public interface EduCourseMapper extends BaseMapper<EduCourse> {
    public CoursePublishVO getPublishCourseInfo(String courseId);
}

com.wangzhou.eduservice.mapper.xml.EduCourseMapper.xml。

<?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.wangzhou.eduservice.mapper.EduCourseMapper">
    <select id="getPublishCourseInfo" resultType="com.wangzhou.eduservice.entity.vo.CoursePublishVO">
        SELECT ec.id,ec.title,ec.price,ec.lesson_num,
               ecd.description,
               et.name,
               es1.title AS oneSubject,
               es2.title AS twoSubject
        FROM edu_course ec
                 LEFT JOIN edu_course_description ecd ON ec.id=ecd.id
                 LEFT JOIN edu_teacher et ON ec.teacher_id=et.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=#{id}
    </select>
</mapper>

现在mapper已经完成了,我们来实现调用吧。

com.wangzhou.eduservice.controller.EduCourseController.

//根据课程id查询课程确认信息
@GetMapping("/getpublishCourseInfo/{id}")
public R getpublishCourseInfo(@PathVariable String id){
    CoursePublishVO publishCourseInfo = eduCourseService.getPublishCourseInfo(id);
    return R.ok().data("publishCourse",publishCourseInfo);
}

EduCourseServiceImpl

  @Override
    public CoursePublishVO getPublishCourseInfo(String id) {
        return baseMapper.getPublishCourseInfo(id);

    }

至此,就完成了后端的接口部分,读者可以使用swagger自测。