Maven多模塊項目搭建+整合SSM框架

從大二開始就一直關注segmentFault,在問題專區幫忙回答一些本身知曉的問題;在寫這篇文章以前我一直會在朋友圈發一些本身遇到的問題以及解決辦法,這是第一次寫文章,感受有那麼一點生疏。
這篇文章主要講Maven搭建SSM(Spring、SpringMVC、Mybatis)項目,以前在學習搭建項目的時候看過不少相關的文章,雖然網上有許多相似的,可是我仍是想寫一寫,分享一下本身在搭建項目中的體會。java

1、什麼是Maven?

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

2、項目搭建

瞭解更多關於Maven知識,能夠到官網瞭解Maven工具的功能和使用方法,在這裏主要聊一聊怎麼運用Maven搭建SSM項目。github

Maven中重要的兩個關鍵詞:繼承和聚合。
繼承:做用就是避免配置重複,對於子項目來講應該關心父項目是怎麼樣配置的。
聚合:字面理解就是「聚在一塊兒合做完成工做」,就是將子模塊彙集起來完成相應的項目需求web

一、父工程的搭建

項目結構:spring

clipboard.png

在父工程中,主要負責完成依賴的版本管理,並非實際的依賴。sql

第一步:建立父工程

clipboard.png

clipboard.png

Group Id:項目組織的惟一標識 com爲域,後面一個爲公司名稱
Artifact Id:項目惟一標識,通常爲項目名稱
pom:爲父工程打包類爲pom,提供依賴版本管理express

第二步:依賴管理

clipboard.png

其中mybatis

<dependencyManagement></dependencyManagement>

是依賴管理,並非實際依賴。mvc

clipboard.png

Maven插件也是一樣的操做,須要注意的是:配置Maven插件maven-compiler-plugin<configuration>表明編譯使用jdk1.8來完成,這兩步操做完成父工程配置就已經完成。

二、聚合工程搭建

名稱:聚合工程web-manager

此時聚合工程,應該和父工程創建依賴關係,纔可使用父工程裏面管理的相應版本的依賴。


clipboard.png

依賴關係添加之後,pom.xml文件中就會多出<parent>節點

clipboard.png

完成了聚合工程的搭建,後面就要開始搭建子模塊了,作好準備了嗎?

三、子模塊搭建(一)

名稱:manager-mapper
該模塊主要用來管理dao層,其中有pojo以及mapper接口和文件

子模塊建立須要注意,建立時須要在聚合工程上點擊右鍵->新建->Maven module

clipboard.png

Next:

clipboard.png

Next:
該步驟須要注意,該模塊打包方式應該爲jar,將該模塊打成jar包就能夠供其餘模塊使用

clipboard.png

聚合項目工程中就會多出一個目錄結構:

![圖片上傳中...]

三、子模塊搭建(二)

名稱:manager-service
該模塊主要用來管理service層,其中有事務管理等

Todo:新建操做同上,都是須要打成jar包

clipboard.png

注意:在Service層中,因爲Service層須要依賴與dao層,因此須要在pom.xml中配置依賴關係

clipboard.png

四、子模塊搭建(三)

名稱:manager-web
主要用於管理jsp界面以及其餘配置文件

注意:項目打包再也不是jar包,而是war包,其餘配置一致
clipboard.png.]

當建立完web模塊,該模塊會報錯,錯誤以下:

clipboard.png

錯誤解決辦法:因爲模塊建立時,缺乏WEB-INF/web.xml文件,只須要建立文件,問題就能夠解決

clipboard.png

此時,各類模塊就建立完成,因爲時間有限,在這裏籠統的介紹一下,每個模塊裏面都有pom.xml文件應該怎麼樣配置呢?其實這個問題是這樣解決的,每個模塊,只須要在pom文件中添加該模塊須要的依賴就能夠,最重要的是:開始的時候提到,父工程主要用於管理依賴版本信息,在添加依賴是不須要填寫版本信息,以下:

clipboard.png

五、Spring和SpringMVC配置

範圍:配置manager-web模塊

目錄結構:

clipboard.png

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>

clipboard.png

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>

clipboard.png

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/>

clipboard.png

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

clipboard.png

效果:

clipboard.png

恭喜!整合成功,如今就須要編寫dao層和service層

五、Mapper

範圍:配置manager-mapper模塊

目錄結構:

clipboard.png

實體類:

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();

}

五、Service

範圍:配置manager-service模塊

目錄結構:

clipboard.png

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();
    }

}

最後測試結果爲:

clipboard.png

clipboard.png

clipboard.png

整合已經成功!因爲第一次寫文章,如有不正確的地方請你們多多指教,謝謝!

項目已經上傳到github:Maven多模塊項目搭建+SSM框架整合

相關文章
相關標籤/搜索