有天上飛的概念,就要有落地的實現
概念十遍不如代碼一遍,朋友,希望你把文中所有的代碼案例都敲一遍
先贊後看,養成習慣
SpringBoot 圖文教程系列文章目錄
- SpringBoot圖文教程1—SpringBoot+Mybatis 環境搭建
- SpringBoot圖文教程2—日誌的使用「logback」「log4j」
- SpringBoot圖文教程3—「‘初戀’情結」集成Jsp
- SpringBoot圖文教程4—SpringBoot 實現文件上傳下載
- SpringBoot圖文教程5—SpringBoot 中使用Aop
- SpringBoot圖文教程6—SpringBoot中過濾器的使用
- SpringBoot圖文教程7—SpringBoot攔截器的使用姿勢這都有
- SpringBoot圖文教程8—SpringBoot集成MBG「代碼生成器」
- SpringBoot圖文教程9—SpringBoot 導入導出 Excel 「Apache Poi」
- SpringBoot圖文教程10—模板導出|百萬數據Excel導出|圖片導出「easypoi」
- SpringBoot圖文教程11—從此不寫mapper文件「SpringBoot集成MybatisPlus」
- SpringBoot圖文教程12—SpringData Jpa的基本使用
- SpringBoot圖文教程13—SpringBoot+IDEA實現代碼熱部署
- SpringBoot圖文教程14—阿里開源EasyExcel「為百萬數據讀寫設計」
- SpringBoot圖文教程15—項目異常怎麼辦?「跳轉404錯誤頁面」「全局異常捕獲」
前言
本文已經收錄碼雲倉庫:https://gitee.com/bingqilinpeishenme/Java-Tutorials 本文涉及源碼下載地址:https://gitee.com/bingqilinpeishenme/multi-module-demo
什麼是多模塊開發?如圖所示,項目中每一個包對應都是一個完整的項目,在IDEA中稱之為模塊,每一個模塊都有完整的項目結構:獨立的pom文件,獨立的配置文件,獨立的編譯文件輸出模塊等等。
那麼這樣項目結構的項目是如何設計出來的呢?
SpringBoot 多模塊開發
技術選型:
SpringBoot MybatisPlus MybatisPlus教程見:SpringBoot圖文教程11—從此不寫mapper文件「SpringBoot集成MybatisPlus」 Mysql 多模塊開發效果圖如下:
父級工程開發
父級工程可以用來統一管理所有項目的依賴,如圖,如果在父級項目中有一個mysql依賴,那麼所有繼承這個父級項目的子項目中也會繼承到mysql的依賴
1.創建一個Project
2.對IDEA做一些項目基本的配置
- 字符編碼配置
- 註解生效激活
- Java編譯版本選擇
3.寫父級項目的pom文件
pom文件的詳細內容見註釋
<code> 4.0.0 org.springframework.boot spring-boot-starter-parent 2.1.3.RELEASE com.lby multi-module-demo 1.0-SNAPSHOT pom 1.8 1.18.4 org.projectlombok lombok ${lombok-version} provided com.baomidou mybatis-plus-boot-starter 3.3.1.tmp com.alibaba druid 1.0.19 mysql mysql-connector-java 5.1.38 /<code>
注意:
- 父級項目的packing必須設置為 pom
- dependencies 和 DependencyManagement 的區別 dependencies 在當前項目中引入依賴,如果子項目繼承了該項目,也會在子項目中引入依賴 DependencyManagement 只是聲明依賴,並不實際引入,因此子項目需要顯式聲明需要用到的依賴 如果在子項目中聲明依賴,是不會從父項目中繼承下來的,只有在子項目中寫了該依賴項,並且沒有執行具體版本,才會從父項目中繼承該項,並且version和scope都讀取自父pom 如果子項目指定了版本號,那麼會使用子項目中指定的jar版本子項目開發
子項目開發的步驟如下:
基於Project創建module 修改pom 寫配置,沒有可以不寫 寫代碼
1.創建multi-entity
1.基於Project創建module
創建完multi-entity後打開pom可以看到
此時打開父級項目的pom 會看到
2.修改pom
完整的multi-entity項目的pom如下:
<code> multi-module-demo com.lby 1.0-SNAPSHOT 4.0.0 multi-entity com.baomidou mybatis-plus-boot-starter /<code>
3.在項目中寫入實體類
<code>package com.lby.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; @TableName("cmfz_admin") @Data public class Admin { /** * 主鍵屬性 @TableId * * value 該屬性對應的數據庫表中的字段名 * type 主鍵自增的類型 AUTO 代表自動遞增 */ @TableId(value = "id",type = IdType.AUTO) private Integer id; /** * 非主鍵屬性 @TableField * @TableField("username") 參數為該屬性對應的數據庫表中的字段名 * */ private String username; private String password; private String salt; } /<code>
2.按照上述步驟創建 multi-dao
對於dao模塊而言,不同的地方在於,在multi-dao中需要使用到 multi-entity中的實體類,但是怎麼在dao模塊中使用到另一個項目中的實體類呢?
將multi-entity像依賴一樣導入 multi-dao中
multi-dao完整pom文件
<code> multi-module-demo com.lby 1.0-SNAPSHOT 4.0.0 multi-dao com.lby multi-entity 1.0-SNAPSHOT mysql mysql-connector-java com.alibaba druid /<code>
在multi-dao寫入dao接口
<code>package com.lby.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.lby.entity.Admin; public interface AdminDao extends BaseMapper { } /<code>
3.創建 multi-service 模塊
完整pom文件
<code> multi-module-demo com.lby 1.0-SNAPSHOT 4.0.0 multi-service com.lby multi-dao 1.0-SNAPSHOT /<code>
寫入業務類
<code>package com.lby.service; import com.lby.dao.AdminDao; import com.lby.entity.Admin; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; /** * 之所以能夠直接使用@Service註解 * 是因為 multi-service 模塊 依賴了 multi-dao * multi-dao 依賴了 multi-entity * multi-entity 中的 MybatisPlus 依賴在項目中導入了Spring的jar包 */ @Service public class AdminService { @Autowired private AdminDao adminDao; public List adminList(){ return adminDao.selectList(null); } } /<code>
4.創建 multi-controller 模塊
multi-controller 模塊是啟動類所在的模塊 所以我們把配置文件 啟動類以及SpringBoot集成maven的插件都放在這個項目中
1.完整的pom文件
<code> multi-module-demo com.lby 1.0-SNAPSHOT 4.0.0 multi-controller com.lby multi-service 1.0-SNAPSHOT org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-test test org.springframework.boot spring-boot-maven-plugin /<code>
2.application配置文件配置
<code>#配置端口號 server: port: 8802 #數據源的配置 spring: datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/cmfz?useUnicode=true&characterEncoding=UTF-8 username: root password: 123456 type: com.alibaba.druid.pool.DruidDataSource #mybatis-plus mybatis-plus: mapper-locations: classpath:mapper/*Mapper.xml # root 全局日誌等級 默認是info 可以修改 debug warn error logging: level: root: info com.baizhi: debug /<code>
3.啟動類代碼
<code>package com.lby; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @MapperScan("com.lby.dao") @SpringBootApplication public class AppRun { public static void main(String[] args) { SpringApplication.run(AppRun.class,args); } } /<code>
4.controller代碼
<code>package com.lby.controller; import com.lby.entity.Admin; import com.lby.service.AdminService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; @RestController public class AdminController { @Autowired private AdminService adminService; @RequestMapping("adminList") public List adminList(){ return adminService.adminList(); } } /<code>
5.啟動項目
通過啟動類啟動項目
訪問地址:http://localhost:8802/adminList 可以看到如下效果
如果要使用插件啟動 需要先對父項目進行 clean 和 install操作
6.測試
編寫測試類
運行測試方法 效果如下
7.打包項目
注意:啟動類在哪個模塊,就通過哪個模塊打包
通過maven打包項目
找到打包好的項目 通過java -jar運行項目
訪問地址:http://localhost:8802/adminList 可以看到如下效果
常見問題處理
1.循環依賴問題
錯誤信息提示:
<code>Error:java: Annotation processing is not supported for module cycles. Please ensure that all modules from cycle [qrcode-common,qrcode-manager-pojo] are excluded from annotation processing /<code>
原因分析:循環依賴 死循環了
解決方案:修改模塊中的依賴
2.IDEA修改pom不生效問題
在使用IDEA開發多項目的時候發現這樣一個問題:修改pom文件之後,不管怎麼刷新都不生效
解決方案:重啟 IDEA 即可
總結
本文涉及源碼下載地址:https://gitee.com/bingqilinpeishenme/multi-module-demo
恭喜你完成了本章的學習,為你鼓掌!如果本文對你有幫助,請幫忙點贊,評論,轉發,這對作者很重要,謝謝。
讓我們再次回顧本文的學習目標
掌握SpringBoot中多模塊開發
要掌握SpringBoot更多的用法,請持續關注本系列教程。
求關注,求點贊,求轉發
歡迎關注本人公眾號:鹿老師的Java筆記,將在長期更新Java技術圖文教程和視頻教程,Java學習經驗,Java面試經驗以及Java實戰開發經驗。