目录
在IDEA创建多模块MavenSpringBoot项目
部分注解及细节解释说明
部分代码解释一
首先,了解下maven项目的三种打包方式:
①.war 打包为war包项目时,可以放在tomcat下运行
②.jar 打包成jar包就是要使用java -jar xxx.jar方式来运行,最常见的就是SpringBoot项目
③.pom 它只是用来做依赖管理,打包成的项目并不能直接运行。
- 比如Springboot项目的父依赖以及再住上的依赖打包方式就是pom,因为它们只做依赖管理。
部分代码解释二
①. IDEA使用Spring Initializr与Maven创建项目的区别?
- 位置:(菜单栏【File】→【New】→【Project】,如"图1"所示。
- 首先说明下,两者都可以创建Maven项目,本质上没多大区别,只在pom依赖的引入时间上有所不同。
---------------------------------------------
②. Spring Initializr与Maven区别
- 使用“spring initializr”创建项目,可以直观的手动勾选依赖,项目创建成功后pom.xml中会自带依赖--如"图2"所示。
- 使用“Maven”创建项目,需要自己在pom.xml文件夹中添加依赖。
- (Maven适合网络环境差的情况下使用)
(图1)
(图2)
部分代码解释三
①. 父项目作为用来存放web模块,entity模块,service模块,dao模块的一个空模块。
- 父项目就是刚开始使用IDEA创建的一个空项目模块。
②. 父级项目的packing(打包方式)必须设置为"pom"
③. dependencies 和 DependencyManagement 的区别
- dependencies 在当前项目中引入依赖,如果子项目继承了该项目,也会在子项目中引入依赖。
- DependencyManagement 只是声明依赖,并不实际引入,因此子项目需要显式声明需要用到的依赖。
- 如果在子项目中声明依赖,是不会从父项目中继承下来的,只有在子项目中写了该依赖项,并且没有执行具体版本,才会从父项目中继承该项,并且version和scope都读取自父pom。
- 如果子项目指定了版本号,那么会使用子项目中指定的jar版本。
④. 在父项目中的pom.xml中模块信息写法如下:
com.lzk //模块组ID名字
web //模块名
0.0.1-SNAPSHOT //模块版本号
pom //模块的打包方式pom
⑤. 在子模块中的pom.xml中模块信息写法如下:
com.lzk //模块组ID名字
service //模块名
0.0.1-SNAPSHOT //模块版本号
jar //模块的打包方式jar
创建项目前介绍
概述一
①. 首先:创建一个Multi-module2父项目。
- (作用:用来存放创建的多模块项目)。
②. 其次:在Multi-module2父项目下,创建web模块+dao模块+entity模块+service模块。
- 以下对每个子模块作用的解释说明:
web模块:里面存放(启动类和接口访问类)
entity模块:里面存放(实体类及其他Model类)
dao模块:里面存放(访问数据库接口或业务逻辑实现)
service模块:里面存放(做为中转站,将web模块的请求转发给dao来处理,并将返回结果返回给web模块)
③. 最后:将四个模块所需要的依赖分别写入本模块的pom.xml里面,利用web模块启动类来启动项目。
- **注意**:application.yml配置文件放置在web子模块的"resources"文件下,
其他模块可以将"Application启动类"和"resources的application配置文件"删掉,仅留下web模块的启动类和配置文件)。
- application.yml配置文件在本项目工程中,我放置在web子模块的"resources"文件下,其实也可以放置在dao子模块的"resources"文件下。
概述二
这里使用IDEA来演示多模块创建案例,分别需要创建的子模块包含:
①. Web模块:控制层(请求处理层)--启动类 Web模块:是启动类所在的模块。
Web模块:所以我们把配置文件 启动类以及SpringBoot集成maven的插件都放在这个项目模块中。
因此我们要再Web模块(pom.xml)中添加以下依赖:
org.springframework.boot
spring-boot-maven-plugin
-------------------------------------------------------------
②. Entity模块:实体模型层
③. Service模块:业务层
④. Dao模块:数据层
**下面开始创建多模块项目**
第一步:父项目模块创建
打开IDEA-->点击+Create New Project
-->创建一个用来存放存放web子模块,entity子模块,service子模块,dao子模块的父项目空模块--如"图3"所示。
分别步骤如下:
①. 选择Spring Initializr,Initializr默认选择Default,点击Next--如"图4"所示。
②. 填写输入框,点击Next(Group:定义包名,Artifact:定义项目名)--如"图5"所示。
- ("图5"界面的-->Group表示:项目组名,artifact表示:项目名)
③. 这步不需要选择直接点Next(这一步只需要选择对应的版本就可以了,其他的可选可不选)--如"图6"所示。
④. 点击Finish创建项目(此页面一般默认,需要编辑自行修改)--如"图7"所示。
⑤. 最终得到项目结构如下--如"图8"所示。
⑥. 删除无用的.mvn目录、src目录、mvnw及mvnw.cmd文件,最终只留.gitignore和pom.xml--如"图9"所示。
- 保留如下目录结构--"图9"
(图3)
(图4)
(图5)
(图6)
(图7)
(图8)
(图9)
***此时父项目空模块就创建成功了,接下去创建子项目模块***
第二步:子项目模块创建-web模块
①. 创建子模块与上面创建父项目模块方式基本一致。
- 在刚才这个项目的根文件夹上鼠标右键,new->module->选择maven项目,点击Next--如"图10,图11"所示。
- 一定要在刚才这个项目的根文件夹上创建,因为这样它会自动为我们写好依赖关系(pom依赖关系),不然还要自己写。
**注意**:这时注意选择它的父依赖,如果没有就点击右边按纽选择刚才创建的parent-module,填入子项目模块名,点击Next--如"图12"所示。
②. 在选择好在磁盘上的文件夹目录,默认情况下是正确的,直接跳过就好了,点击Finish即可--如"图13"所示。
- (Module file localion:这里的子项目模块一定要在父项目的目录里面)
③. 此时就在parent-module父项目模块下,创建成功子项目模块--如"图14"所示。
④. 创建成功的子项目模块web,就会在父项目模块的pom.xml自动添加如下一句:
web
⑤. 以及在web子项目模块下的pom.xml自动添加如下的父依赖:
- (就是刚才创建的parent-module项目)
parent-module
com.lzk
0.0.1-SNAPSHOT
⑥. 此时这个web的项目就创建好了,我们将这个子项目做为项目入口。
- (在web子项目模块里面,应该要写一个springBoot的启动类来启动项目,只有这一个web项目要写,其他的不用写)--如"图15"所示。
⑦. 作为web层,我们还要在web模块pom.xml中引入springboot-web的依赖
org.springframework.boot
spring-boot-starter-web
---------------------------------------------------
⑧. web子模块需要在resources文件下创建一个application.yml配置文件,用来配置数据库连接。
- application.yml配置文件--如"图A"所示。
(图10)
(图11)
(图12)
(图13)
(图14)
(图15)
(图A)
第三步:子项目模块创建-entity模块
①. 接下去创建entity模块-->
- 在父项目(Multi-module)下鼠标右键,new->module->选择maven项目建entity模块。
(创建步骤和创建web模块步骤同-"图10~图14"),除了web模块,其他模块无需"图15"的启动类。
- 在父项目模块下创建的好dao层-->会自动帮我们在父项目的pom.xml中添加一下子模块依赖:
entity
③. entity模块用来存放实体类,因此我们只需要创建一个实体类即可--如"图16"所示。
- 这里的User上面头部注解@Entity表示:使用Hibernate自动帮我们在数据库创建User这个表.
- @Getter和@Setter:表示自动帮我们在底层创建Get和Set方法.
④. 此时在entity模块的操作就完成了!
(图16)
第四步:子项目模块创建-dao模块
①. 接下去创建dao模块-->
- 在父项目(Multi-module)下鼠标右键,new->module->选择maven项目建dao模块。
(创建步骤和创建web模块步骤同-"图10~图14"),除了web模块,其他模块无需"图15"的启动类。
- 在父项目模块下创建的好dao层-->会自动帮我们在父项目的pom.xml中添加以下子模块依赖:
dao
②. dao模块用来操作数据库表的数据,这里我们使用Jpa来实现持久化,只需继承Jpa接口即可--如"图17"所示。
- (因为Jpa底层自带操作数据的的"增删改查方法")
- Jpa详情可参考此链接:https://www.cnblogs.com/wadmwz/p/10313495.html
③. 由于dao需要依赖entity模块,将查询到的数据映射到User实体类上,因此需要要本模块的pom.xml导入entity模块依赖。
com.lzk
entity
0.0.1-SNAPSHOT
④. 此时在dao模块的操作就完成了!
(图17)
第五步:子项目模块创建-service模块
①. 接下去创建service模块-->- 在父项目(Multi-module)下鼠标右键,new->module->选择maven项目建service模块。(创建步骤和创建web模块步骤同-"图10~图14"),除了web模块,其他模块无需"图15"的启动类。②. 在父项目模块下创建的好dao层-->会自动帮我们在父项目的pom.xml中添加一下子模块依赖:service③. service模块用来将web模块的请求传递到dao模块,执行数据库操作,并将dao模块的返回结果返回给web模块--如"图18,图19"所示。- (因此在service模块中,创建一个UserService接口及其UserServiceImpl接口的实现类)- (UserServiceImpl实现类用来调用dao模块的UserRepository类,执行方法上的查询操作)④. 此时由于service模块需要用到dao和entity模块依赖,因此需在本模块的pom.xml中导入dao和entity模块的依赖。com.lzkdao0.0.1-SNAPSHOTcom.lzkentity0.0.1-SNAPSHOT⑤. 此时在service的操作就做完了!
(图18)
(图19)
第六步:四个模块创建展示
①.此时我们在Multi-module项目下创建的四个模块(web,entity,dao,service)就创建完成了。
②. 模块展示,如"图20"所示。
(图20)
第七步:web模块创建请求接口-UserController及启动增加注解
①. 在web模块中添加一个UserController类,提供给客户或前端页面发起请求的入口--"图21"所示。
②. 需要在WebApplication启动类加上@ComponentScan(value = "com.lzk")注解。--如"图22"所示。
(@ComponentScan注解是对整个项目下的com.lzk包进行扫描,不然会出现UserService或UserRepository找不到的情况)
(图21)
第八步-关于配置文件说明(application.yml)
①. **注意**:配置文件application.yml不管是放在web或dao子模块下的"resources"文件下,都可以正常执行。
②. application.yml配置文件代码如下:
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/usermodule?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC
username: root
password: root123
jpa:
hibernate:
ddl-auto: update
show-sql: true
database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
-------------------------------------------------------------
③. application.yml配置文件是放在web模块还是dao模块呢?
- 首先:不管是放在web模块是dao模块都可以。
- 其次:如果有两个相同名字的application.yml配置文件,会优先执行web模块里面的配置文件,
因为web模块包含启动类,是项目的入口。
- 最后:如果web模块里面没有application.yml配置文件,dao里面有配置文件,则会读取dao模块里面的application.yml配置文件。
因此优先顺序是:先读取web模块配置文件,若web模块不存在配置文件,则读取dao模块的配置文件。
项目工程完成
①. 最终的项目结构图示-"图22"
(图22)
项目工程测试
①. 使用web子模块的WebApplication类来启动项目-"图23-图24"
②. Run表示正常启动项目。
③. Debug表示使用调试模式启动项目。
④. 接下去打开数据库:查看我们User表,以及里面的数据-"图25"
(User表中的数据,可以手动在数据库表中添加进去)
接下去打开游览器,输入:http://localhost:8080/user/list-"图26"
("图26"就查询出数据库对应的所有数据出来了!)
(图23)
(图24)
(图25)
(图26)
启动测试遇到的问题总结
①. 代码写好后,在web模块下运行Application.main()时,可能会报错:错误代码大致显示为:
Description:
-------------Field UserService in com.lzk.modules.UserController required a bean of type 'com.lzk.modules.service.UserService' that could not be fonnd.
②. 说明@Service没有扫描到,因此应该在WebApplication.java类上添加扫描注解@ComponentScan("com.lzk"),即可成功扫描,实现启动!
----------------------------------------------------------------------
具体代码已上传gitee一山/Multi-module2gitee.com
**注意**:以上纯属个人学习笔记,整理分享出来,希望对大家有帮助!!
--- 对于有不同观点的大V欢迎评论指点,一起成长,一起进步!!---