從大二開始就一直關注segmentFault,在問題專區幫忙回答一些本身知曉的問題;在寫這篇文章以前我一直會在朋友圈發一些本身遇到的問題以及解決辦法,這是第一次寫文章,感受有那麼一點生疏。
這篇文章主要講Maven搭建SSM(Spring、SpringMVC、Mybatis)項目,以前在學習搭建項目的時候看過不少相關的文章,雖然網上有許多相似的,可是我仍是想寫一寫,分享一下本身在搭建項目中的體會。java
Apache Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project's build, reporting and documentation from a central piece of information.mysql
這個是官方給出來的解釋,我我的理解爲:Maven就是一個不須要手動導入依賴、項目打包和項目構建的工具,這個只是我的的觀點,如有不對還請指教。git
瞭解更多關於Maven知識,能夠到官網瞭解Maven工具的功能和使用方法,在這裏主要聊一聊怎麼運用Maven搭建SSM項目。github
Maven中重要的兩個關鍵詞:繼承和聚合。
繼承:做用就是避免配置重複,對於子項目來講應該關心父項目是怎麼樣配置的。
聚合:字面理解就是「聚在一塊兒合做完成工做」,就是將子模塊彙集起來完成相應的項目需求web
項目結構:spring
在父工程中,主要負責完成依賴的版本管理,並非實際的依賴。sql
Group Id:項目組織的惟一標識 com爲域,後面一個爲公司名稱
Artifact Id:項目惟一標識,通常爲項目名稱
pom:爲父工程打包類爲pom,提供依賴版本管理express
其中mybatis
<dependencyManagement></dependencyManagement>
是依賴管理,並非實際依賴。mvc
Maven插件也是一樣的操做,須要注意的是:配置Maven插件maven-compiler-plugin<configuration>表明編譯使用jdk1.8來完成,這兩步操做完成父工程配置就已經完成。
名稱:聚合工程web-manager
此時聚合工程,應該和父工程創建依賴關係,纔可使用父工程裏面管理的相應版本的依賴。
依賴關係添加之後,pom.xml文件中就會多出<parent>節點
完成了聚合工程的搭建,後面就要開始搭建子模塊了,作好準備了嗎?
名稱:manager-mapper
該模塊主要用來管理dao層,其中有pojo以及mapper接口和文件
子模塊建立須要注意,建立時須要在聚合工程上點擊右鍵->新建->Maven module
Next:
Next:
該步驟須要注意,該模塊打包方式應該爲jar,將該模塊打成jar包就能夠供其餘模塊使用
聚合項目工程中就會多出一個目錄結構:
![圖片上傳中...]
名稱:manager-service
該模塊主要用來管理service層,其中有事務管理等
Todo:新建操做同上,都是須要打成jar包
注意:在Service層中,因爲Service層須要依賴與dao層,因此須要在pom.xml中配置依賴關係
名稱:manager-web
主要用於管理jsp界面以及其餘配置文件
注意:項目打包再也不是jar包,而是war包,其餘配置一致
.]
當建立完web模塊,該模塊會報錯,錯誤以下:
錯誤解決辦法:因爲模塊建立時,缺乏WEB-INF/web.xml文件,只須要建立文件,問題就能夠解決
此時,各類模塊就建立完成,因爲時間有限,在這裏籠統的介紹一下,每個模塊裏面都有pom.xml文件應該怎麼樣配置呢?其實這個問題是這樣解決的,每個模塊,只須要在pom文件中添加該模塊須要的依賴就能夠,最重要的是:開始的時候提到,父工程主要用於管理依賴版本信息,在添加依賴是不須要填寫版本信息,以下:
範圍:配置manager-web模塊
目錄結構:
web.xml配置:
<!-- Spring IOC配置 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-config/applicationContext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
Spring MVC配置:
<servlet> <servlet-name>spring</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>spring</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping>
SpringMVC配置
<!-- 包掃描--> <context:component-scan base-package="com.web"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/> </context:component-scan> <!-- 視圖解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/"></property> <property name="suffix" value=".jsp"></property> </bean> <mvc:annotation-driven/>
Spring配置
<!-- 包掃描 --> <context:component-scan base-package="com.web"> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" /> </context:component-scan> <!-- 加載配置文件 --> <context:property-placeholder location="classpath:properties/mysql.properties" /> <!-- 配置c3p0數據源 --> <bean class="com.mchange.v2.c3p0.ComboPooledDataSource" id="dataSource"> <property name="driverClass" value="${driverClass}"></property> <property name="jdbcUrl" value="${url}"></property> <property name="user" value="${user}"></property> <property name="password" value="${password}"></property> </bean> <!-- sqlSessionFactory --> <bean class="org.mybatis.spring.SqlSessionFactoryBean" id="sqlSessionFactory"> <property name="dataSource" ref="dataSource"></property> <property name="configLocation" value="classpath:mybatis/mybatis.xml"></property> <property name="mapperLocations" value="classpath:mapper/*.xml"></property> </bean> <!-- mapper掃描 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property> <property name="basePackage" value="com.web.dao"></property> </bean> <!-- 事務配置 --> <bean class="org.springframework.jdbc.datasource.DataSourceTransactionManager" id="transactionManager"> <property name="dataSource" ref="dataSource"></property> </bean> <tx:annotation-driven transaction-manager="transactionManager"/>
配置mybatis.xml
<configuration> <settings> <setting name="lazyLoadingEnabled" value="true" /> </settings> </configuration>
Controller
package com.web.controller; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import com.web.service.PersonService; @Controller public class webController { @Autowired PersonService personService; @GetMapping("/test.do") public String get(){ System.out.println(personService.selectPersonList()); return "test"; } }
運行項目:
http://localhost:8080/manager-web/index.jsp
效果:
恭喜!整合成功,如今就須要編寫dao層和service層
範圍:配置manager-mapper模塊
目錄結構:
實體類:
package com.web.entity; public class Person { private int id; private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Person(int id, String name) { this.id = id; this.name = name; } public Person() { } @Override public String toString() { return "Person [id=" + id + ", name=" + name + "]"; } }
Mapper接口:
package com.web.dao; import java.util.List; import com.web.entity.Person; public interface PersonMapper { public List<Person> selectPersonList(); }
範圍:配置manager-service模塊
目錄結構:
PersonService:
package com.web.service; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.web.dao.PersonMapper; import com.web.entity.Person; @Service public class PersonService { @Autowired PersonMapper personMapper; @Transactional public List<Person> selectPersonList(){ return personMapper.selectPersonList(); } }
最後測試結果爲:
整合已經成功!因爲第一次寫文章,如有不正確的地方請你們多多指教,謝謝!