写在前面

小插曲:
真的气死我了(╯▔皿▔)╯
我在解决加载问题的时候居然把target里面的代码删干净了,我都懵逼了我以为ctrl+z能拯救一切,但是回不来了,而且最重要的是回收站也没有,很奇怪。
我都快气死了,真的没办法了只能找来老师的源码,我那些注释都没有了,还好我在博客上记录了一些还能抢救。再次见识到了备份的重要性还有git仓库的重要性。
下次注意,不对,没有下一次!

课程确认发布

课程信息确认(后端)

老师把它放在第八天了,但是还是都放在第九天吧,这个和第九天的内容紧密型强

自写sql查询课程

由于课程信息确认中信息的回显只是多张表中的其它一些值,所以写sql语句应该是最好的办法实现的。
只需要创建一个封装这些数据的Vo类就可以了,不需要再贼多涨表还要在对应的Service做什么查询再拷贝进Vo类,麻烦死啦。

多表连接查询的三种方式

1、内连接:是指多张表内有相同字段名称,表与表内部之间有直接关系
2、左外连接: 是指位于左边的表可以选择性查出全部想要的字段,位于右边的需要加条件来实现关联关系,如果关系不成立就查不出来。
3、右外连接: 和左外连接相反,左边的是关联表

下面给出例子(实际需求基本上都是左外连接查询)

1
2
3
4
5
6
7
8
9
10
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 outer join edu_course_description ecd on ec.id = ecd.id
left outer join edu_teacher et on ec.teacher_id = et.id
left outer join edu_subject es1 on ec.subject_parent_id = es1.id
left outer join edu_subject es2 on ec.subject_id = es2.id
where ec.id = '1670024852233478146'


接着就可以在mpper层里面添加的接口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package com.atguigu.eduservice.mapper;

import com.atguigu.eduservice.entity.EduCourse;
import com.atguigu.eduservice.entity.vo.CoursePublishVo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;

import java.util.List;

/**
* <p>
* 课程 Mapper 接口
* </p>
*
* @author testjava
* @since 2020-03-02
*/
public interface EduCourseMapper extends BaseMapper<EduCourse> {

public CoursePublishVo getPublishCourseInfo(String courseId);
}

在映射文件中写sql语句

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?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.atguigu.eduservice.mapper.EduCourseMapper">
<!--sql语句:根据课程id查询课程确认信息-->
<select id="getPublishCourseInfo" resultType="com.atguigu.eduservice.entity.vo.CoursePublishVo">
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 OUTER JOIN edu_course_description ecd ON ec.id=ecd.id
LEFT OUTER JOIN edu_teacher et ON ec.teacher_id=et.id
LEFT OUTER JOIN edu_subject es1 ON ec.subject_parent_id=es1.id
LEFT OUTER JOIN edu_subject es2 ON ec.subject_id=es2.id
WHERE ec.id=#{courseId}
</select>
</mapper>

在controller层写接口

1
2
3
4
5
6
//根据课程id查询课程确认信息
@GetMapping("getPublishCourseInfo/{id}")
public R getPublishCourseInfo(@PathVariable String id) {
CoursePublishVo coursePublishVo = courseService.publishCourseInfo(id);
return R.ok().data("publishCourse",coursePublishVo);
}

加载报错问题

问题就出现在maven加载忽略了在java包下的xml文件,导致程序找不到我们写的sql语句. maven加载的时候,把java文件夹里面.java后缀的文件进行编译,如果是其它类型的文件则不会加载。

解决方式:
1、复制xml到target目录中
2、把xml文件放到resources目录下
3、推荐使用,通过配置实现,修改如下。
(1)pom.xml 在guli_edu的pom中配置如下节点
(2)项目application.properties 在Spring Boot配置文件中添加配置

1
2
3
4
5
6
7
8
9
10
11
12
<!-- 项目打包时会将java目录中的*.xml文件也进行打包 -->
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>

1
mybatis-plus.mapper-locations=classpath:com/atguigu/eduservice/mapper/xml/*.xml