开发者学堂课程【微服务+全栈在线教育实战项目演练(SpringCloud Alibaba+SpringBoot):课程管理-课程信息确认(后端)】学习笔记,与课程紧密连接,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/667/detail/11392
课程管理-课程信息确认(后端)
内容介绍
一、课程发布
二、出现的问题
三、再次启动
一、课程发布
1、课程确认
进入第三步首先把课程信息最后确认,在里面就显示这些内容,这就
叫课程信息确认。
此前接口已经写过了。根据课程ID用紫外连接查出里面的数据,包
括它最终返回的是一个对象,是专门定的一个类别。在里面有需要的
数据,也就是重新写到的。
(2)代码如下:
SELECTec.id,ec.title,ec.price,ec.lesson_numASlessonNum,ec.
Cover
et.nameASteacherName
es1.titleASsubject.Leve10ne
es2.titleASsubject.Leve1Two
FROMedu_courseec
LEFTOUTERJOINedu_course_descriptionecdONec.id=ecd.id
LEFTOUTERJOINedu_teacheretONec.teacher_id=et.id
LEFTOUTERJOINedu_subjectes1ONec.
subject_parent_id=es1.id
LEFTOUTERJOINedu_subjectes2ONec.subject_id=es2.id
WHEREec.id=#{courseid}
//根据课程 id 查询课程确认信息
GetMapping("getPublishCourseInfo/{id})
publicRgetPublishCourseInfo(PathVariableStringid){
CoursePublishVo
coursePublishVo=courseService.PublishCourseInfo(id)
returnR.ok().data("PublishCourse",coursePublishVo)
privateStringid;
privateStringtitle;
privateStringcover;
privateIntegerlessonNum;
privateStringsubject.Leve10ne;
privateStringsubject.Leve1Two;
privateStringteacherName;
privateStringprice;//只用于展示
二、出现的问题
在运行过程中出现了方法找不到的错误,现在把这个问题解决一下。
1、过程
在 mapper 里面编写 sql 语句,调用,出现错误。这个错误提示方
法找不到。
2、方法找不到的原因
(1)PPT 内容
maven 默认加载机制,只会把 src-main-java 文件夹中的 java 类型
文件进行加载,其他类型文件不会加载。
(2)文字讲解
在 src,main,java 这个文件夹中,只是写 java 代码和一些内容。
在 maven 中有一个特点,就是只会把 src-main-java 中的 java 类
型的文件进行加载。
如果有其他类型的文件,则是不会去加载的。而在 java 文件夹中,
除了有 java 这个文件之外,还有一个类型的文件,就是mapper中
的 xml 文件。这个文件默认是不会加载的。所以在执行过程中没有
插入文件就会报出方法找不到这个错误。这是对于问题的描述,包括
可以到 target 中看一下。
这个 target 是加载编译之后的内容,而在 com 里面 mapper 中是
没有插入文件的,现在就报出方法找不到的错误。
3、解决方式
总体上有两大种方式。
(1)复制 xml 文件到 target 目录中。
第一种方式是直接复制 xml 文件到 target 中,这应该是最简单的
方式。因为编译之后就到target里面,现在把 mapper 中的 xml 文
件进行一个复制,之后直接复制到编译后的 target 中的 mapper 的
文件夹中,在这里面把它粘贴过来。
直接复制并没有问题,实际中也会经常这样来做。那直接把第一部分
的代码复制到 pom 文件,注意不要把位置复制错,要放到
dependencies 的外延,用 build 标签引领。
表示 directory 文件夹中的内容要进行包含加载,包含就是
include。**/*.xml的意思就是加载xml类型的文件。如果写一个*,
就表示加载时一层目录。比如有一个com里面加内容就是一层目录,
如果写两个*就代表多层目录。比如在xml前面有很多级目录,这就
叫多层目录。
②代码如下
<build>
<resources>
<resource>
<directory>src/main/java</dicertory>
<includes>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
<build>
(2)方法二
通过配置文件进行配置,让 maven 默认加载 xml 文件
因为有些人并不想自己复制,而是想让它自动加载。
第二种方法就是通过配置文件进行配置,让 maven 去默认加载 xml
文件。或者还有一种方式,把文件放到 resourse 文件中也可以。当
然更建议用这种直接配置的方法做到。
配置的方法就是在两个地方进行配置。第一个方法就是在 pom.xml
中进行一段配置。
第二个方法就是在 application.properties 进行配置。这是进行配
置的两个地方,两处缺一不可。
首先在 pom 里面进行配置,那找到项目的pom文件。这个配置可以
写到service_edu中。但因为在其它的模块中可能也需要这个xml
文件,所以为了方便都统一放到service中。如果放到普通的edu
或者是oss中也可以,但是这样的活每个模块都要用就都需要些。
统一放到service中,这里面的模块就都可以用了。加完之后注意
路径需要改一下,改为当前的路径。classpath 代表的是类路径。
src里面的内容就是类路径,而在 target 的 classes 中的内容就
是类路径。
③代码如下
mybatis-plus.mapper-
locations=classpath:com/atguigu/eduservice/mapper/xml/*.xml
三、再次启动
启动之后先到 target 里面看一下文件是否已经加载进来,如果没有
的话可能就是因为项目没有更新,那就在项目的路径里看一下。
在 target 中有一个 xml 文件夹,在这里面文件已经有了,这样就
代表已经加载进来了。第一次是没有的,加载进来之后等待执行就可
以了。
关于xml文件怎样加载就是通过配置做到的。注意配置的路径不要
写错。完成之后再到swagger里面测试一下看最终的结果。传入一
个课程id,再点击 tryitout。
代码如下:
“success”:true
“code”:20000
“message”:“成功”
“data”:{
“publishCourse”:{
“id”:“1235001618890838018”,
“title”:“00041”,
“cover”:“static/01.jpg”,
“lessonNum”:10,
“subjectLevelone”:“前端开发”,
“subjectLevelTwo”:“vuc”,
“teacherName”:“王二”,
“price”:“10.00”