重识maven
?在之前直接使用了maven,了解了maven的最基本的使用,但是一直沒有對maven做一個全面的了解,只知道maven是用來導jar包的,今天對maven做一個重新認識,方便后面理解springboot:
1.maven的父子工程:創建一個maven父工程
創建成功后刪除src文件夾,因為父工程只負責管理jar包
1.1.父工程并沒有實質性的內容,所有的jar包都在里面,也就是說只需要管理jar包即可,不參與任何邏輯開法
然后再父工程的pom文件中導入依賴:
<dependencies><!--mysql包--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.45</version></dependency><!--spring包--><!--mybatis包--><!--shiro包--></dependencies>在以往的項目中我們都是這么導入依賴的,現在導入依賴后,在父工程下創建子模塊
創建好子工程后,在回過頭查看父工程的pom文件:
可以看到,剛創建的子模塊都在父工程的pom文件中顯示出來了,在子工程的pom文件中也有這樣一段代碼
標識該模塊的父工程,那么父工程是用來管理依賴的,因此父工程內有的依賴,子工程就會繼承該依賴,因此就會在每一個子工程中都導入一遍父工程的依賴,
2.在父工程中擁有很多子模塊,每一個子模塊都代表了不用的包(package:entity,mapper,service,impl,controller)
而且父工程中的所有jar包,都會被子工程所繼承
問題1:
如果依賴非常多的話,就會影響項目的性能,因為每個模塊負責的功能都不相同,如果web模塊需要shiro的jar包,而其他的模塊都不需要該jar包,但是因為父子工程的規則,強制子模塊將jar包都導入進來,每一個子模塊都都導入進來,就會影響項目于的性能運行速度等。怎么解決?
<!--dependencyManagement標簽,被該標簽控制的jar包不會被子工程所繼承,如果子工程有需要,可以重寫父工程中的jar包并且不需要寫版本號(如果寫了版本號,就表示是從maven重新下載,而不是繼承父類工程的)--><dependencyManagement></dependencyManagement>具體實例如下:
<dependencyManagement><dependencies><!--mysql包--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.45</version></dependency><!--spring包--><!--mybatis包--><!--shiro包--></dependencies></dependencyManagement>現在在父工程中,將jar包放入了dependencyManagement標簽中,那么子模塊就不能從父類中繼承了,如果子工程需要用
不用寫版本號,繼承自父類。
使用maven的好處:
? 方便了整個項目的管理,解決了jar包冗余的問題,方便分布式開發
問題2:
如果開始分模塊開發,那么之前我們項目中寫的entity、controler、mapper、service等包都會被分成一個一個的模塊,這時候,controller要調用service,service要調用mapper,可是不在一個模塊中,如圖:
?仙子啊mapper中的UserMapper類內存在方法需要調用User實體:
User實體是在另一個model中的,調不到怎么解決?
使用工程依賴
在mapper項目中的pom.xml文件中以jar包的形式引入model項目即可
一旦使用量的工程依賴,就會出現層級依賴
在mapper模塊的pom文件中引入model:
<dependency><!--groupId與父工程的一樣--><groupId>com.zs</groupId><!--需要引入的模塊--><artifactId>model</artifactId><!--需要引入的版本號--><version>1.0-SNAPSHOT</version></dependency>然后就可以在mapper中引入User對象了:
問題3:
使用了層級依賴,上級所引用的jar包,下級是否可以引用?
?可以引用,在mapper中引用了model,在service中可以直接引用不需要重新導入依賴:
在service模塊中引入mapper依賴:
這里并沒有引入model的依賴;然后寫接口:
注意,在這里仍然可以使用model的依賴,因為service引入了mapper,而mapper引入了model,因此service也可以使用model中的類。
定義實體類的標準:
1.需要實現序列化接口
2.需要重寫hashCode和equalse
3.需要重寫toString()
4.必須有getter和setter方法
5.要求所有的類型全部為包裝類型,不能使用基本類型(因為使用包裝類型可以防止空指針異常)
?
轉載于:https://www.cnblogs.com/Zs-book1/p/11360304.html
總結
- 上一篇: 使用XSLT转换XML数据并传递参数
- 下一篇: Docker实现运行tomcat并部署项