项目日记:学成在线(第一天P7~P23)

1、启动类是什么,@SpringBootApplication的作用,run方法

1、可以通过启动类启动一个项目
举例:

@SpringBootApplication
@EnableDiscoveryClient  //将微服务注册到注册中心
@ComponentScan("com.xyxy.gmall")   //自定义包扫描,将自定义的bean注入到IOC容器中
public class ProductApplication {  
public static void main(String[] args) { 
SpringApplication.run(ProductApplication.class, args);
 }
 }

2、通过run方法可以将项目自动部署到tomcat上(因为spring-boot-starter-web依赖中,它自带了一个tomcat依赖)
3、run方法的作用:
①初始化IOC容器(通过源码发现,run方法的返回值是ConfigurableApplicationContext——一个接口,然后通过不断查看,发现ConfigurableApplicationContext最终继承的是BeanFactory接口,所以能够实现初始化IOC)
②加载启动类(run中传入了启动类的字节码文件ProductApplication.class,所以在初始化IOC容器后会扫描启动类上的注解)
4、启动类上的注解:
① @SpringBootApplication:
目的是开启自动配置,是个复合注解,包括了——
@SpringBootConfiguration(标识启动类是配置类,类中定义的Bean会注入到IOC容器中)
@EnableAutoConfiguration(自动配置):涉及到了两个核心原理:
1>自动配置:初始化可能用到的所有bean对象(依据是pom文件)
2> 起步依赖:对pom文件进行优化(解决版本冲突、利用依赖传递性整合所有所需依赖)
@ComponentScan(包扫描,我们自定义的扫描注解扫描的是我们用得上的模块,而这个注解——自带的,会扫描启动类所在的包下的所有子包中的所有类的注解)

2、在base工程中的parent标签下指定了父工程的坐标,那relativePath这个标签的作用

举例:

<parent>
<groupId>net.itxw</groupId>
<artifactId>test</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<relativePath/>
</parent>

relativePath:指定查找该父项目pom.xml的(相对)路径
其他几个标签的作用:
groupId:项目所属组织的唯一标识符,一般是公司官网域名反写或组织名
artifactId:项目的唯一标识符,是项目根目录的名称
version:指定项目当前的版本,SNAPSHOT意为快照,说明该项目还处于开发中,是不稳定的版本
Packaging: 可选,maven会使用默认值jar,表示工程打包格式
GroupId(俗称:包结构)、ArtifactId(俗称:项目名)。
GroupID实际对应项目的包名称;而 ArtifactID 实际对应项目名称。

3、gitignore文件在提交git时的作用?(*)

在工程中,并不是所有文件都需要保存到版本库中的,例如“target”目录及目录下的文件就可以忽略。在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件或目录。
文件语法:
#:开头的行表示注释行
(星号):用来匹配零个或多个字符
(星号).a表示忽略.a文件;
(星号).[oa]表示忽略所有以.a和.o结尾的文件,* ~ 忽略所有以~结尾的文件;
[]用来匹配括号内的任一字符,如[abc],也可以在括号内加连接符,如[0-9]匹配0至9的数;
?用来匹配单个字符;
!:用来否定忽略
比如前面用了*.txt,然后使用!*a.txt,则这个a.txt不会被忽略
/:
正斜杠在前:匹配项目跟目录;如/bin表示忽略根目录下的bin文件,/bsp表示忽略根目录下的bsp文件夹,但不忽略子目录里的user/bsp文件夹;
正斜杠在后:匹配文件夹以及在该文件夹路径下的内容,但是不匹配该文件;如bsp/表示忽略bsp文件夹里的所有文件;
**:匹配多级目录,可在开始,中间,结束;
项目中第一章第24页中的文件意思是:忽略:HELP.md和target路径下的所有内容,但是不忽略:.mvn/wrapper/maven-wrapper.jar、/src/main/路径下的所有内容以及/src/test/路径下的所有内容
项目日记:学成在线(第一天P7~P23)_第1张图片

4、面试:如何处理git版本冲突?

出现冲突的原因:
因为当本地文件的版本与目标分支中文件的版本不一致时,或者当存在同一行的内容不同时在进行合并时会出现冲突时。
出现的情况有两种:
①多个分支向主分支合并时
②同一个分支下pull或push操作时
解决方式:
①通过图形界面:通过点击merge,选择好相应的版本后,点击apply并push到远程仓库
②不通过图形界面:会在出现冲突后,在代码中自动添加版本标识,然后手动修改代码,将文件添加到暂存区,提交文件,push到远程仓库即可。

5、面试:是在哪个分支开发?

我们不是直接在主分支开发,由技术经理创建独立的开发分支,我们是在独立的开发分支中进行开发,最后由技术经理将开发分支合并到主分支。

6、面试:maven依赖版本冲突怎么处理?

maven依赖版本冲突一般是由于 间接依赖 导致一个jar包有多个不同的版本,比如:A——>B1.0,C——>B2.0,项目依赖了A和C,从而间接依赖了B的1.0和2.0版本,可能会出现ClassNotFoundException、NoSuchMethodError等错误。
解决方法:
1、使用exclusions 排除依赖(在依赖A或C时将对B的依赖排除)
2、使用dependencyManagement锁定版本号,通常在父工程对依赖的版本统一管理

7、面试:maven常用命令?

mvn clean //清除target目录中的生成结果(target目录也会被删除)
mvn compile //编译源代码(生成target目录及其中的class文件)
mvn test //执行单元测试
mvn package //打包(打包后的包也会放在target下)
mvn install //打包并把打好的包保存到本地仓库
mvn deploy //打包并把打好的包上传到远程仓库

【补充】maven项目的目录结构:
src:该目录主要存放的是项目的源代码文件。
target:该目录是项目编译后产生的一个目录,主要存放的是编译后的.class文件。
pom.xml:该文件是Maven项目的核心配置文件,配置jar包的坐标信息。

8、这个项目中,启动虚拟机的必备两个步骤:

启动docker
执行restart命令启动docker容器
在这里插入图片描述
docker和虚拟机之间的区别:
虚拟是用软件再模拟了一系列的“CPU,内存,硬盘”等“虚拟硬件”,Docker不用再模拟CPU,内存,它们共用物理主机上的硬件资源, 这样性能更强,更节省资源(减少从微指令到汇编语言之间模拟与仿真的过程),同时还保持各容器之间,容器与宿主机之间的文件,进程,网络的独立性。
启动虚拟机需要先启动虚拟机的操作系统,再启动应用,这个过程非常慢;而启动 Docker 相当于启动宿主操作系统上的一个进程。
(还有一个小问题:那为啥不直接在自己的电脑上用docker进行,还非得来个虚拟机?)

9、在IDEA中schemas是啥,在导入数据库脚本之前?

查资料了之后,感觉应该是在IDEA连接上数据库后,会在schemas文件夹下显示数据库中的表(在连接数据库时,可以指定用哪个数据库,然后schemas就会显示这个数据库中的表)

10、面试:MySQL常见的存储引擎及区别?

InnoDB(事务、行锁+表锁、外键)
1、支持事务。
2、使用的锁粒度默认为行级锁,可以支持更高的并发;也支持表锁。
3、支持外键约束;外键约束其实降低了表的查询速度,增加了表之间的耦合度。
二、MyISAM(非事务、表锁)
1、不提供事务支持
2、只支持表级锁
3、不支持外键
【总结】
MyISAM管理非事务表,存储、检索、全文搜索方面很快,适合于大量的select操作
InnoDB用于事务处理,适合于执行大量insert和update操作

11、面试:MySQL建表时注意什么?

注意选择存储引擎,如果要支持事务需要选择InnoDB。
注意字段类型的选择,比如,固定长度字段选择char,不固定长度的字段选择varchar,varchar比char节省空间但速度没有char快;
每个字段写清楚注释。
注意字段的约束,比如:非空、唯一、主键等
尽量不要定义外键,保证表的独立性,可以存在外键意义的字段

12、什么是PO类?(和POJO是一个吗)

PO:
Persistant Object持久对象,数据库表中的记录在java对象中的显示状态
最形象的理解就是一个PO就是数据库中的一条记录(也可以理解为对应了数据库中的一张表,因为记录和表的属性是一样的)
好处是可以把一条记录作为一个对象处理,可以方便的转为其它对象
POJO:
POJO有一些Private的参数作为对象的属性。然后针对每个参数定义了get和set方法作为访问的接口,是简单Java对象,但不是JavaBean等
一个POJO持久化以后就是PO
【补充】持久状态:pojo类已经被持久化就处于持久状态,和Session存在联系,对象被存入Session缓存中,对象的数据的改变都会在Session关闭或事务提交时被更新到数据库中。

13、关于controller、service、dao这三个作用,啥时候创建?

controller层:控制并处理http请求。controller层是不允许直接操作数据库的!controller层负责前后端交互,他是个桥梁,架起了外界与业务层的沟通,,接受前端请求,调用Serice层的接口来控制业务流程
Service :业务逻辑层/服务层,所有的内部的业务逻辑都会放在这里处理
dao层就是和数据库打交道的,负责与数据库进行联络的一些任务都封装在此
@controller控制器(注入服务),用于标注控制层组件, 标注于类体上(controller层注解)
@service服务(注入dao),用于标注业务层组件,标注于Service接口的实现类上,将当前类自动注入到Spring容器中(service层注解)
@Mapper 标注于接口的上方,用于框架寻找接口和对应接口的xml文件(DAO层注解)
【补充】@Mapper和@Repository的相同点和区别;
相同:@Mapper和@Repository都是作用在dao层接口,使得其生成代理对象bean,交给spring 容器管理
区别:
1、@Mapper不需要配置扫描地址,可以单独使用,如果有多个mapper文件的话,可以在项目启动类中加入@MapperScan(“mapper文件所在包”)
2、@Repository不可以单独使用,否则会报错误,要想用,必须配置扫描地址(@MapperScannerConfigurer)

14、在xuecheng-plus-content工程中用到了maven的聚合,看一下

maven的聚合性和继承性:
Maven的聚合特性可以帮助我们把项目的多个模块聚合在一起,使用一条命令进行构建,即一条命令实现构建多个项目;
Maven的继承特性可以将各个模块相同的依赖和插件配置提取出来,在简化POM的同时还可以促进各个模块配置的一致性。
聚合性:
聚合模块的打包方式必须为pom,否则无法完成构建
其聚合的工程都写在model标签中
举例:xuecheng-plus-content的pom文件内容

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>xuecheng-plus-parent</artifactId>
<groupId>com.xuecheng</groupId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../xuecheng-plus-parent</relativePath>
</parent>
<artifactId>xuecheng-plus-content</artifactId>
<name>xuecheng-plus-content</name>
<description>xuecheng-plus-content</description>
<packaging>pom</packaging>
<modules>
<module>xuecheng-plus-content-api</module>
<module>xuecheng-plus-content-model</module>
<module>xuecheng-plus-content-service</module>
</modules>
<project/>

聚合关系:
项目日记:学成在线(第一天P7~P23)_第2张图片

15、@Data和@ToString是lombock中的吗,作用是什么?

两个都是lombock中的
@ToString:写在类上,自动生成该类重写后的tostring方法
@Data:
@Data是将@ToString,@EqualsAndHashCode,@Getter/@Setter和@RequiredArgsConstructor功能捆绑在一起的方便快捷方式。
作用——@Data生成通常与简单POJO(普通JAVA对象)的所有样板代码:所有字段的getter方法,所有非final字段的setter方法;涉及类字段的相应toString,equals和hashCode实现;还有所有final字段已初始化的构造器;以及被@NonNull标记且未初始化的所有非final字段,以确保该字段始终不会为null。
举例:

@Data
public class People {
   private String height;
   private String weight;
}
@Data
public class Student extends People {
   private String name;
}
public class Test {
   public static void main(String[] args) {
       Student student = new Student();
       student.setHeight("180cm");
       student.setWeight("65kg");
       student.setName("Jack");

       System.out.println(student.toString());
   }
}

输出结果:Student(name=Jack)

16、@ResponseBody注解的作用

@ResponseBody用于标识一个控制器方法,大多数情况都需要向浏览器响应一个java对象,此时必须将java对象转换为json字符串才可以响应到浏览器,这个注解可以将java对象自动转换为json对象
【补充】@RequestBody作用:
@RequestBody注解标识控制器方法的形参即可将此类请求参数转换为java对象(json——>java)

17、RequestMapping作用,支持什么类型(get、post)

解释:
@RequestMapping注解的作用就是将请求和处理请求的控制器方法关联起来,建立映射关系。
SpringMVC 接收到指定的请求,就会来找到在映射关系中对应的控制器方法来处理这个请求
主要属性:value、method
value:
是一个数组,其中存储的是路径信息,如果请求的路径和其中任意一个能匹配上,就会执行控制器方法
method:
也是一个数组,用于限制请求的方式,主要有get、post、delete、put等(都是http的请求方式)
get:可以理解为 取 的意思,对应select操作,用来获取数据的,只是用来查询数据,不对服务器的数据做任何的修改,新增,删除等操作。
post:post 可以理解为 贴 的意思,数据发送到服务器以创建或更新资源,侧重于更新数据,对应update操作
put:可以理解为 放 的意思,数据发送到服务器以创建或更新资源,侧重于创建数据,对应insert操作
delete:面意思删除,即删除数据,对应delete操作,用来删除指定的资源,它会删除URI给出的目标资源的所有当前内容

18、面试:SpringBoot接口开发的常用注解有哪些?

@Controller 标记此类是一个控制器,可以返回视图解析器指定的html页面,通过@ResponseBody可以将结果返回json、xml数据。
@RestController 相当于@ResponseBody加 @Controller,实现rest接口开发,返回json数据,不能返回html页面。
(前两个的区别:第一个返回json或html,第二个只能返回json)
@RequestMapping 将请求和处理请求的控制器方法关联起来,建立映射关系。可以标记在类上也可以标记在方法上,支持http的post、put、get等方法。(又衍生出4种只能标记在方法上的注解:@PostMapping、@GettMapping、@PutMapping、@DeleteMapping)
@RequestBody 定义在方法上,用于将json串转成java对象。
@PathVarible 接收请求路径中占位符的值.

19、关于autowired这个注解

首先了解一下IOC操作Bean管理,bean管理是指(1)spring创建对象 (2)spring注入属性。当我们在将一个类上标注@Service或者@Controller或@Component或@Repository注解之后,spring的组件扫描就会自动发现它,并且会将其初始化为spring应用上下文中的bean。 当需要使用这个bean的时候,例如加上@Autowired注解的时候,这个bean就会被创建。

20、bootstrap中各部分的作用,比如第一部分是只有在启动http服务时才需要的

Spring Boot 默认支持 properties(.properties) 和 YAML(.yml .yaml ) 两种格式的配置文件,yml 和 properties 文件都属于配置文件,功能一样。
bootstrap.yml 用来程序引导时执行,应用于更加早期配置信息读取。可以理解成系统级别的一些参数配置,这些参数一般是不会变动的。一旦bootStrap.yml 被加载,则内容不会被覆盖。

21、@Bean作用,和@configuration之间的关系

@configuration相当于配置文件中的< beans>< beans/>,可以在其中配置bean
@Bean相当于配置文件中的< bean>< bean/>,可以在容器中注入bean
@Bean用在加了@Configuration的类内,在以后每次调用driver()或者car()获取Driver、Car对象时,是从Spring单例池中拿,而不是每次新new一个类对象出来。
【补充】@Bean、@configuration、@component:
@Bean和@Component两者的目的是一样的,都是注册bean到Spring容器中。
@Component注解表明一个类会作为组件类,并告知Spring要为这个类创建bean。

@Bean用在加了@Component的类内,在以后每次调用driver()或者car()获取Driver、Car对象时,不是从Spring单例池中拿,而是每次新new一个类对象出来);
@Bean用在加了@Configuration的类内,在以后每次调用driver()或者car()获取Driver、Car对象时,是从Spring单例池中拿,而不是每次新new一个类对象出来。

22、@SpringBootTest作用

支持的测试种类,大致可以分为如下三类:
单元测试:一般面向方法,编写一般业务代码时,测试成本较大。涉及到的注解有@Test。
切片测试:一般面向难于测试的边界功能,介于单元测试和功能测试之间。涉及到的注解有@RunWith @WebMvcTest等。
功能测试:一般面向某个完整的业务功能,同时也可以使用切面测试中的mock能力,推荐使用。涉及到的注解有@RunWith @SpringBootTest等。

23、Assertions.assertNotNull作用

Assert.notNull(Object object):断言某个值 不为空,如果为空就抛出异常
【关于断言】
相当于一个if ()语句,如果满足断言的执行程序,如果不满足则抛错误
java断言assert是jdk1.4引入的。
jvm断言默认是关闭的。
断言可以局部开启的,如:父类禁止断言,而子类开启断言,所以一般说“断言不具有继承性”。

24、LambdaQueryWrapper是啥,及其like的用法

与QueryWrapper查询类似,不过使用的是Lambda语法。
和QueryWrapper查询方法相比:
QueryWrapper.eq(“数据库字段名字”,“值”),我们在表字段设计时,很多都是_拼接的,比如:user_name,很容易把数据库字段名输入错误!所以我们使用LambdaQueryWrapper,不需要输入数据库字段名字,输入实体类的对应驼峰命名即可:Employee::getUsername相当于数据库字段username

25、如何确定父工程为一个pom工程

在pom.xml中添加如下内容:< packaging>pom< /packaging>

26、每个工程的作用及其依赖关系

1、父程(xuecheng-plus-parent)的职责是对依赖包的版本进行管理
2、基础工程(xuecheng-plus-base)的职责是提供一些系统架构所需要的基础类库以及一此工具类库,其父工程为:xuecheng-plus-parent
3、微服务中包括:内容管理、媒资管理等
4、内容管理模块工程(xuecheng-plus-content):
负责聚合xuecheng-plus-content-api、xuecheng-pluscontent-service、xuecheng-plus-content-model。
各个模块的作用:
接口工程(xuecheng-plus-content-api)——为前端提供接口。、业务工程(xuecheng-plus-content-service)——为接口工程提供业务支撑、数据模型工程(xuecheng-plus-content-mode)——存储数据模型类、数据传输类型等。
三个模块和content之间的依赖和继承关系:三个都继承content,然后api依赖service,api和service都依赖model。
图示关系:
项目日记:学成在线(第一天P7~P23)_第3张图片

27、PowerDesigner作用

PowderDesigner是一个软件建模工具,它可以做概念模型、物理模型等,本项目使用PowderDesigner完成数据库物理模型的创建。
概念模型是根据用户提出的原始需求梳理实体类型及实体属性,物理模型则对应了数据库的表结构,使用PowderDesigner可以将概念模型转为物理模型,也可以直接将物理模型直接生成sql脚本或直接在数据库中执行。

28、如何修改powerdesigner的表结构

①修改前需要将之前的数据模型保存一份,作用旧版本。进入数据模型,另存为新的数据模型
②在新的数据模型中修改表结构
③将修改完表结构可应用到数据库中
④选择目标数据源
⑤打开原始版本的模型,将其对应的原始版本的sql文件进行覆盖
⑥预览sql文件,没问题后执行,生成新模型对应的表
⑦新表为我们修改后的最新表结构,原表中的数据自动导入新表。(原表依然存在)

29、powerdesigner逆向工程

在企业开发中难免要去维护老系统,而老系统并没有这些设计好的数据模型,此时就需要用到powerDesigner的逆向工程,根据数据库中的表来生成数据模型。

30、pom文件中关于include等标签的一些补充知识

1、* 与** /*意义不同:
*指resource路径下,并不包含resource子文件夹下的文件
** /*指resource路径及其子路径下所有文件
2、include、exclude可以配置多个路径,但路径不要重复,也别包含
2.1、 include说明:打包时只保留include标签下的文件
include 的< filtering>说明:
true:可以规定指定路径下的xml包括properties文件在编译期,将文件指定的$ {key}替换掉;
例如: XXX.xml中我们使用$ {jdbc.url}来代表数据库地址。
那么在Maven编译时,就会将${jdbc.url}替换成真正的地址。
false:不替换
2.2 、exclude说明: exclude规定路径下的文件不被打包
exclude 的< filtering>说明
true: 不在exclude规定路径下,其他的文件由include决定
false: 不在exclude规定路径下,其他的文件不由include决定
2.3、 include 、exclude二者可以配合使用,划定打包范围
项目第一章第20页:项目日记:学成在线(第一天P7~P23)_第4张图片
里面的filtering不是includes标签下的,是说明该配置文件的filter是否激活
Resources标签:用于包含或者排除某些资源文件
filtering标签:true/false,表示在这个resource中,filter是否激活
plugins配置:用于指定使用的插件

31、如何进行需求分析

什么是需求分析
解就是要搞清楚问题域,问题域就是用户的需求,软件要为用户解决什么问题,实现哪些业务功能,满足什么样的性能要求
如何作需求分析?
第一:首先确认用户需求。(用户访谈、问卷调查等手段)
第二:确认关键问题。
用户的原始需求可能是含糊不清的,需要从中梳理出关键问题。(项目中比如:用户需要发布课程,需要扩展出:课程发布需要发布哪些信息、课程发布后用户怎么查看?等问题)
第三:数据建模
要根据分析的关键问题将其相关的信息全部建模。比如:根据发布课程的用户需求,可创建课程基本信息表、课程师资表、课程发布记录表、课程审核记录表等。
第四:编写需求规格说明书(参见第二章第2页)
针对每一个关键问题最终需要编写需求规格说明书,包括:功能名称、功能描述、参与者、基本事件流程、可选事件流、数据描述、前置条件、后置条件等。
第五:需求变更
如果需求改变需要走需求变更流程,确认修改需求后再次确定问题域,最终要修改相关成果物。

32、前后端交互过程

1、前端请求后端服务提供的接口。(通常为http协议 )
2、后端服务的控制层Controller接收前端的请求。
3、Contorller层调用Service层进行业务处理。
4、Service层调用Dao持久层对数据持久化。

33、定义接口需要考虑什么

①协议
通常协议采用HTTP,查询类接口通常为get或post;还要确定content-type(内容类型),参数以什么数据格式提交,结果以什么数据格式响应。一般情况没有特殊情况结果以json 格式响应。
②分析请求参数(有哪些)
③分析响应结果
(请求结果和响应结果目的是构造模型类)
④分析完成,使用SpringBoot注解开发一个Http接口。
⑤使用接口文档工具查看接口的内容。
⑥接口中调用Service方法完成业务处理。

34、序列化接口的作用

项目第二章第24页项目日记:学成在线(第一天P7~P23)_第5张图片

对于 Serializable 接口的作用只停留在进行序列化的理解上,当初的理解认为对于序列化这个解释,就是把实体类信息进行封装存储到数据库中或者将实体类信息进行磁盘上的存储。
但是疑问点来了,既然 Serializable 接口是为了将实体类信息进行存储,那为什么我们平时写的实体类在存储到数据库时没有实现接口却仍然可以进行数据的存储?
序列化作用:

  • 提供一种简单又可扩展的对象保存恢复机制。
  • 对于远程调用,能方便对对象进行编码和解码,就像实现对象直接传输。
  • 可以将对象持久化到介质中,就像实现对象直接存储。
  • 允许对象自定义外部存储的格式。

序列化的作用是为了更好的保存和传输数据,也就是在进行数据的保存和传输时可以提供一个更佳可靠的方案来保证数据的安全性
对于基本类型,我们在使用数据库时,都有一个与之相对应的数据类型进行匹配如:

>Java             数据库
int       ->     int
String    ->     varchar
Long      ->     bigint
....             ....

所以在使用时一般不必注意实体类的序列化,但是当使用的是 NoSql 类型的数据库时,这种类型的数据库中根本没有与之相对应的数据结构来进行匹配,因此就需要使用序列化来进行数据的安全传输和存储。而对于更加复杂的操作中,如果不进行序列化的实现,往往是会出现一些错误的。

35、@Api,@ApiOperation说明

@API
是用在类上,表明是swagger资源,拥有两个属性:value、tags
注:生成的api文档会根据tags分类,即这个controller中的所有接口生成的接口文档都会在tags这个list下;tags如果有多个值,会生成多个list,每个list都显示所有接口
@ApiOperation
是用在方法上,表示一个http请求的操作,value用于方法描述,notes用于提示内容,tags可以重新分组
总结,APIXXX都和swagger文档有关
@ApiOperation:用于注释方法
@ApiParam:用于注释参数
@ApiModel:用于注释类
@ApiModelProperty:用于属性

36、项目的开发流程是什么?

1、产品人员设计产品原型。
2、讨论需求。
3、分模块设计接口。
4、出接口文档。
5、将接口文档给到前端人员,前后端分离开发。
6、开发完毕进行测试。
7、测试完毕发布项目,由运维人员进行部署安装。

37、数据字典

问题背景:
项目中有审核状态,课程类型,用户类型等字段,这一类数据有一个
共同点就是它有一些分类项,且这些分类项较为固定。
针对这些数据,为了提高系统的可扩展性,专门定义数据字典表去维护
(可扩展性就是关于如何处理更大规模的业务。)
项目中:
1、数据字典表在系统管理数据库中存储,属于系统模块,不属于内容管理模块

38、关于controller、service、dao层的一些补充

1、首先,service有自己的实现类,而@service、@Mapper注解是在实现类中,不是在service类中
2、service实现类继承service类,需要重写service类的方法
3、controller类没有实现类
4、要遵循Controller–Service接口–ServiceImpt实现类–Mapper接口模式;
5、dao层的接口相当于mapper,每个mapper对应的xml文件相当于其实现类(只是相当于,不像service层有明确定义)
6、在controller中也是调用的service接口,而不是service的实现类(第43页)

39、总结:内容管理模块中各部分功能及知识

1、课程查询(针对教学机构成员)
在课程管理页面输入查询条件查询课程信息:
当不输入查询条件时显示全部课程信息。
输入查询条件显示符合条件的课程信息。
约束:本教学机构查询本机构的课程信息。
项目日记:学成在线(第一天P7~P23)_第6张图片
①主要涉及两个表:课程基本信息表、课程计划表(因为“任务数”需要关联计划表)
②生成PO类:本项目使用mybatis-plus的generator工程生成PO类,生成的PO类存储在对应的各个工程中(比如与内容管理有关的PO类存储在content工程的model模块下)
③各种模型类:
DTO(Data Transfer Object):用于接口层向业务层之间传输数据(controller向service)
PO:用于业务层与持久层之间传输数据(service向dao)
VO:用在前端与接口层之间传输数据(前端向controller,且仅在当前端有多个平台且接口存在差异时需要设置VO,否则只用DTO即可)
总结即:接口和业务层交互用DTO,业务层和数据库交互用PO
项目日记:学成在线(第一天P7~P23)_第7张图片

2、系统模块
主要包括:数据字典表、

内容管理模块功能:查询课程信息、查询课程分类、新增课程、修改课程、查询课程计划、新增/修改课程计划、(删除课程、添加师资信息)等
主要涉及的:课程、课程分类、课程计划、师资、课程营销信息的增删改查操作;课程图片、视频、文档等资料的保存操作(他们的上传及处理是媒资管理服务负责)

你可能感兴趣的:(项目,java,spring,spring,boot)