教育后台管理系统是提供给相关业务人员使用的一个后台管理系统,业务人员可以在这个后台管理系统中,对课程信息、广告信息、用户信息、 权限信息等数据进行维护。
在 Java web 阶段已经完成了教育后台管理系统中的课程模块,接下来将对教育后台管理系统进行升级改造,基于 SSM 框架来完成课程信息模块、广告信息模块、用户信息模块、权限信息模块。
Vue.js
:是一套用于构建用户界面的渐进式 JavaScript 框架Element UI 库
:是饿了么前端出品的基于 Vue.js 的后台组件库,方便程序员进行页面快速布局和构建Node.js
:是运行在服务端的 JavaScript 运行环境Axios
:实现了对 Ajax 的封装,而 Ajax 技术实现了局部数据的刷新开发工具:后端 - IDEA 2019,前端 - VS code,数据库客户端工具 - SQLYog
开发环境:JDK 11,Maven 3.6.3,MySQL 5.7
Maven 是一个项目管理工具,主要作用是在项目开发阶段对 Java 项目进行依赖管理和项目构建。
依赖管理:是对 jar 包的管理。通过导入 maven 坐标,就相当于将仓库中的 jar 包导入了当前项目中。
项目构建:通过 maven 的一个命令就可以完成项目从清理、编译、测试、报告、打包,部署整个过程。
本地仓库
远程仓库
本地仓库 ---> maven 私服 --> maven 中央仓库
clean 清理
compile 编译
test 测试
package 打包
install 安装
Maven 坐标书写规范
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>5.1.47version>
dependency>
在 maven 中,依赖是可以传递的,假设存在三个项目,分别是项目 A,项目 B 以及项目C。假设 C 依赖 B,B 依赖 A,那么可以根据 Maven 项目依赖的特征推出项目 C 也依赖 A。
...
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webmvcartifactId>
<version>5.1.5.RELEASEversion>
dependency>
...
如上所示,当 web 项目直接依赖了 spring-webmvc
,而 spring-webmvc
依赖了 sping-aop
、spring-beans
等。最终的结果就是在 web 项目中间接依赖了 spring-aop
、spring-beans
等。
...
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webmvcartifactId>
<version>5.1.5.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-aopartifactId>
<version>5.1.6.RELEASEversion>
dependency>
...
如上所示,由于依赖传递现象的存在,spring-webmvc
依赖 spring-beans-5.1.5
,而spring-aop
依赖 spring-beans-5.1.6
,但是发现 spirng-beans-5.1.5
已经加入到了工程中,这时候如果希望 spring-beans-5.1.6
加入工程,就造成了依赖冲突。
在 POM 文件中定义依赖,以先声明的依赖为准。其实就是根据坐标导入的顺序来确定最终使用哪个传递过来的依赖。
...
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-aopartifactId>
<version>5.1.6.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webmvcartifactId>
<version>5.1.5.RELEASEversion>
dependency>
...
结论:spring-aop
和 spring-webmvc
都传递过来了 spring-beans
,但是因为 spring-aop
在前面,所以最终使用的 spring-beans
是由 spring-aop
传递过来的,而 spring-webmvc
传递过来的 spring-beans
则被忽略了。
...
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-aopartifactId>
<version>5.1.6.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webmvcartifactId>
<version>5.1.5.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-beansartifactId>
<version>5.1.7.RELEASEversion>
dependency>
...
总结:直接依赖大于依赖传递。
可以使用 exclusions
标签将传递过来的依赖排除出去。
...
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webmvcartifactId>
<version>5.1.5.RELEASEversion>
<exclusions>
<exclusion>
<groupId>org.springframeworkgroupId>
<artifactId>spring-beansartifactId>
exclusion>
exclusions>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-aopartifactId>
<version>5.1.6.RELEASEversion>
dependency>
...
采用直接锁定版本的方法确定依赖 jar 包的版本,版本锁定后则不考虑依赖的声明顺序或依赖的路径,以锁定的版本为准添加到工程中,此方法在企业开发中经常使用。
版本锁定的使用方式:
第一步 - 在 dependencyManagement
标签中锁定依赖的版本
第二步 - 在 dependencies
标签中声明需要导入的 maven 坐标
dependencyManagement
标签中锁定依赖的版本...
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-beansartifactId>
<version>5.1.5.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-contextartifactId>
<version>5.1.5.RELEASEversion>
dependency>
dependencies>
dependencyManagement>
...
dependencies
标签中声明需要导入的 maven 坐标...
<dependencies>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webmvcartifactId>
<version>5.1.5.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-beansartifactId>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-contextartifactId>
dependency>
dependencies>
...
properties
标签的使用...
<properties>
<project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
<maven.compiler.encoding>UTF-8maven.compiler.encoding>
<java.version>1.11java.version>
<maven.compiler.source>1.11maven.compiler.source>
<maven.compiler.target>1.11maven.compiler.target>
<spring.version>5.1.5.RELEASEspring.version>
<springmvc.version>5.1.5.RELEASEspringmvc.version>
<mybatis.version>3.5.1mybatis.version>
properties>
...
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-beansartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-contextartifactId>
<version>${spring.version}version>
dependency>
dependencies>
dependencyManagement>
<dependencies>
...
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-contextartifactId>
dependency>
<dependency>
<groupId>org.mybatisgroupId>
<artifactId>mybatisartifactId>
<version>${mybatis.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-jdbcartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-txartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-testartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webmvcartifactId>
<version>${springmvc.version}version>
dependency>
,,,
dependencies>
,,,
概念:在现实生活中,汽车厂家进行汽车生产时,由于整个生产过程非常复杂和繁琐,工作量非常大,所以厂家都会将整个汽车的部件分开生产,最终再将生产好的部件进行组装,形成一台完整的汽车。
在企业项目开发中,由于项目规模大,业务复杂,参与的人员比较多,一般会通过合理的模块拆分将一个大型的项目拆分为 N 多个小模块,分别进行开发。而且拆分出的模块可以非常容易的被其他模块复用。
常见的拆分方式有两种:
不管上面哪种拆分方式,通常都会提供一个父工程,将一些公共的代码和配置提取到父工程中进行统一管理和配置。
父工程:资源的统一管理 - 依赖管理、版本锁定
按层拆分
- maven_web 依赖 mavent_service 依赖 mavent_dao 依赖 maven_pojo
- maven_web、mavent_service、mavent_dao、maven_pojo 四个工程都继承 maven_parent
在 Java 语言中,类之间是可以继承的,通过继承,子类就可以引用父类中非 private 的属性和方法。同样,在 maven 工程之间也可以继承,子工程继承父工程后,就可以使用在父工程中引入的依赖。继承的目的是为了消除重复代码。
被继承的 Maven 工程通常称为父工程,父工程的打包方式必须为 POM,所以区分某个 Maven 工程是否为父工程就看这个工程的打包方式是否为 POM:
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0modelVersion>
<groupId>com.rendagroupId>
<artifactId>edu_home_parentartifactId>
<version>1.0-SNAPSHOTversion>
<packaging>pompackaging>
<modules>
<module>ssm-utilsmodule>
<module>ssm-domainmodule>
<module>ssm-daomodule>
<module>ssm-servicemodule>
<module>ssm-webmodule>
modules>
<properties>
<spring.version>5.1.5.RELEASEspring.version>
<springmvc.version>5.1.5.RELEASEspringmvc.version>
<mybatis.version>3.5.1mybatis.version>
properties>
<dependencyManagement>
<dependencies>
...
dependencies>
dependencyManagement>
<dependencies>
...
dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-compiler-pluginartifactId>
<version>3.1version>
<configuration>
<source>1.8source>
<target>1.8target>
<encoding>UTF-8encoding>
configuration>
plugin>
plugins>
build>
project>
继承其他 Maven 父工程的工程通常称为子工程,在 pom.xml 文件中通过 parent 标签进行父工程的继承:
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0modelVersion>
<parent>
<groupId>com.rendagroupId>
<artifactId>edu_home_parentartifactId>
<version>1.0-SNAPSHOTversion>
parent>
<artifactId>ssm-webartifactId>
<packaging>warpackaging>
<dependencies>
<dependency>
<groupId>com.lagougroupId>
<artifactId>ssm-serviceartifactId>
<version>1.0-SNAPSHOTversion>
dependency>
dependencies>
project>
在 maven 工程的 pom.xml 文件中可以使用标签将其他 maven 工程聚合到一起,聚合的目的是为了进行统一操作。
例如拆分后的 maven 工程有多个,如果要进行打包,就需要针对每个工程分别执行打包命令,操作起来非常繁琐。这时就可以使用标签将这些工程统一聚合到 maven 父工程中,需要打包的时候,只需要在此工程中执行一次打包命令,其下被聚合的工程就都会被打包了。
工程整体结构如下:
1)lagou_edu_home_parent
为父工程,其余工程为子工程,都继承父工程 lagou_edu_home_parent
2)lagou_edu_home_parent
工程将其子工程都进行了聚合
3)子工程之间存在依赖关系:
- ssm_utils:编写工具类
- ssm_domain:编写实体类
- ssm_dao:编写 dao 层代码及配置文件
- ssm_service:编写 service 层代码及配置文件
- ssm_web:编写 web 层代码及配置文件
- ssm_domain 依赖 ssm_utils
- ssm_dao 依赖 ssm_domain
- ssm_service 依赖 ssm_dao
- ssm_web 依赖 ssm_service
- ssm_utils、ssm_domain、ssm_dao、ssm_service、ssm_web 都继承 lagou_edu_home_parent
依赖关系建立原则:当前项目要用到哪个项目的资源,那么当前项目就依赖要用到的资源的项目(通过直接依赖和间接依赖的方式)。
lagou_edu_home_parent
构建修改 pom.xml
添加依赖:
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0modelVersion>
<groupId>com.rendagroupId>
<artifactId>lagou_edu_home_parentartifactId>
<version>1.0-SNAPSHOTversion>
<packaging>pompackaging>
<properties>
<project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
<maven.compiler.encoding>UTF-8maven.compiler.encoding>
<java.version>1.11java.version>
<maven.compiler.source>1.11maven.compiler.source>
<maven.compiler.target>1.11maven.compiler.target>
<spring.version>5.1.5.RELEASEspring.version>
<springmvc.version>5.1.5.RELEASEspringmvc.version>
<mybatis.version>3.5.1mybatis.version>
properties>
<dependencyManagement>
<dependencies>