1. 程式人生 > >Spring MVC 學習總結(十一)——IDEA+Maven+多模組實現SSM框架整合

Spring MVC 學習總結(十一)——IDEA+Maven+多模組實現SSM框架整合

一、SSM概要

與SSH(Struts/Spring/Hibernate/)一樣,Spring+SpringMVC+MyBatis也有一個簡稱SSM,Spring實現業務物件管理,Spring MVC負責請求的轉發和檢視管理, MyBatis作為資料物件持久化引擎。這樣搭配的優點是:輕量、自由度高、Spring與Spring MVC契合度更好。通過一個商品管理示例完成SSM框架的整合,可以將前面學習過的一些內容整合起來。

1.1、SpringMVC

1.客戶端傳送請求到DispacherServlet(分發器)

2.由DispacherServlet控制器查詢HanderMapping,找到處理請求的Controller

3.Controller呼叫業務邏輯處理後,返回ModelAndView

4.DispacherSerclet查詢檢視解析器,找到ModelAndView指定的檢視

5.檢視負責將結果顯示到客戶端

 

1.2、Spring

1.Spring是一個輕量級的控制反轉(IOC)和麵向切面(AOP)的容器架構,IOC容器包含並管理應用物件的配置和生命週期,你可以配置你的每個bean如何被建立,也可以配置每個bean是隻有一個例項,還是每次需要時都生成一個新的例項,以及它們是如何相互關聯的。

2.IOC思想最核心的地方在於,資源不由使用資源的雙方管理,而由不使用資源的第三方管理,這可以帶來很多好處。

第一,資源集中管理,實現資源的可配置和易管理。

第二,降低了使用資源雙方的依賴程度,也就是我們說的耦合度。

3.容器提供了AOP技術,利用它很容易實現如許可權攔截、執行期監控等功能。

1.3、MyBatis

1.MyBatis是支援普通SQL查詢,儲存過程和高階對映的優秀持久層框架。MyBatis消除了幾乎所有的JDBC程式碼和引數的手工設定以及結果集的檢索。MyBatis使用簡單的XML或註解用於配置和原始對映,將介面和Java的POJOs(Plan Old Java Objects,普通的Java物件)對映成資料庫中的記錄。

2.MyBatis的操作都是圍繞一個sqlSessionFactory例項展開的。MyBatis通過配置檔案關聯到各實體類的Mapper檔案,Mapper檔案中配置了每個類對資料庫所需進行的sql語句對映。在每次與資料庫互動時,通過sqlSessionFactory拿到一個sqlSession,再執行sql命令。

1.4、Maven多模組

JavaEE專案開發中為了便於後期的維護,一般會進行分層開發,分層之後,各個層之間的職責會比較明確,後期維護起來也相對比較容易。

一個小時學會Maven》可以獲得更多幫助

二、資料庫

開啟MySQL資料庫,建立一個表,這裡以goods表為例,一個用於存放商品的表,共4個欄位id表示編號,name表示商品名稱,picture表示圖片,price表示價格。SQL指令碼如下:

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for `goods`
-- ----------------------------
DROP TABLE IF EXISTS `goods`;
CREATE TABLE `goods` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(200) NOT NULL,
  `price` decimal(10,2) DEFAULT '0.00',
  `picture` varchar(100) DEFAULT 'default.jpg',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of goods
-- ----------------------------
INSERT INTO `goods` VALUES ('1', 'G7 中原G7三合一濃醇咖啡固體飲料1200', '66.50', '1.jpg');
INSERT INTO `goods` VALUES ('2', '百草味東北松子200gx2袋 堅果炒貨零', '42.90', '2.jpg');
INSERT INTO `goods` VALUES ('3', '奈津香 桂圓乾500gx2袋莆田特產5A桂', '39.90', '3.jpg');
INSERT INTO `goods` VALUES ('4', '益達尊享護齒裝草本40粒+冰檸40粒+西', '25.90', '4.jpg');
INSERT INTO `goods` VALUES ('5', '猴坑茶業2016新茶原產地手工太平猴魁特', '168.00', '5.jpg');
INSERT INTO `goods` VALUES ('6', '嘻魷記 休閒零食 麻辣香辣奶香炭燒 5種', '39.80', '6.jpg');
INSERT INTO `goods` VALUES ('7', '榮業鴻福五分瘦臘腸 香港土特產香腸臘味', '126.80', '7.jpg');
INSERT INTO `goods` VALUES ('8', '蓓琳娜(BELLINA)3L PDO特級初榨橄欖油', '178.00', '8.jpg');
INSERT INTO `goods` VALUES ('10', '榮業鴻福五分瘦臘腸 香港土特產香腸臘味', '30.60', '9.jpg');

結果:

三、建立多模組專案

3.1、各模組的功能

common模組:通用模組,不依賴其它任何模組,主要有utils、可以在多個不同專案中得勝的內容

entitie模組:POJO、VO、DTO

dao模組:資料持久化,訪問資料庫,這裡使用Mybatis

service模組:業務模組,處理業務邏輯

webui模組:B/S結構的表示層,主要用於在瀏覽器中顯示資料,提供使用者介面

3.2、建立專案結構

建立父模組,不使用骨架的maven普通專案

建立子模組commons

建立不使用骨架的maven普通專案

entity、dao、service模組建立方法與命名規範同上。

webui需要建立一個使用webapp骨架的maven專案:

完成的專案結構如下:

一個小時學會Maven》可以獲得更多幫助

四、新增各模組間的依賴

子模組預設是繼承父模組的,這裡全部使用按需依賴。

dao模組的pom:

    <dependencies>
        <dependency>
            <groupId>com.zhangguo.ssm01</groupId>
            <artifactId>Ssm01-common</artifactId>
        </dependency>
        <dependency>
            <groupId>com.zhangguo.ssm01</groupId>
            <artifactId>Ssm01-entity</artifactId>
        </dependency>
    </dependencies>

service的pom:

    <dependencies>
        <dependency>
            <groupId>com.zhangguo.ssm01</groupId>
            <artifactId>Ssm01-dao</artifactId>
        </dependency>
    </dependencies>

因為依賴具有傳遞性,在service中可以間接的依賴到entity與common

webui的pom:

    <dependencies>
        <dependency>
            <groupId>com.zhangguo.ssm01</groupId>
            <artifactId>Ssm01-service</artifactId>
        </dependency>
    </dependencies>

依賴完成的結果:

五、完成POJO實體模組

完成這一層之前先明確一下幾個容易混淆的概念:

5.1、POJO

POJO(Plain Ordinary Java Object)簡單的Java物件,實際就是普通JavaBeans,是為了避免和EJB混淆所創造的簡稱。
其中有一些屬性及其getter、setter方法的類,沒有業務邏輯,有時可以作為VO(value-object)或DTO(Data Transfer Object)來使用。不允許有業務方法,也不能攜帶connection之類的方法。

5.2、JavaBean

JavaBean是Java語言寫成的可重用元件。JavaBean則比 POJO複雜很多, Java Bean 是可複用的元件,對 Java Bean 並沒有嚴格的規範,理論上講,任何一個 Java 類都可以是一個 Bean 。EJB則是Enterprise JavaBean,是JavaEE的一部分,定義了一個用於開發基於元件的企業多重應用程式標準。

5.3、Entity

實體bean,一般是用於ORM物件關係對映,一個實體對映成一張表,一般無業務邏輯程式碼。

負責將資料庫中的表記錄對映為記憶體中的Entity物件,事實上,建立一個EntityBean物件相當於建立一條記錄,刪除一個EntityBean物件會同時從資料庫中刪除對應記錄,修改一個Entity Bean時,容器會自動將Entity Bean的狀態和資料庫同步。

5.4、Domain Model

業務物件模型(也叫領域模型 domain model)是描述業務用例實現的物件模型。又稱概念模型、領域物件模型、分析物件模型。領域模型中的實體類分為四種類型:VO、DTO、DO、PO

VO(View Object):檢視物件,用於展示層,它的作用是把某個指定頁面(或元件)的所有資料封裝起來。

DTO(Data Transfer Object):資料傳輸物件,這個概念來源於J2EE的設計模式,原來的目的是為了EJB的分散式應用提供粗粒度的資料實體,以減少分散式呼叫的次數,從而提高分散式呼叫的效能和降低網路負載,但在這裡,我泛指用於展示層與服務層之間的資料傳輸物件。

DO(Domain Object):領域物件,就是從現實世界中抽象出來的有形或無形的業務實體。

PO(PersistentObject):持久化物件,它跟持久層(通常是關係型資料庫)的資料結構形成一一對應的對映關係,如果持久層是關係型資料庫,那麼,資料表中的每個欄位(或若干個)就對應PO的一個(或若干個)屬性。

5.5、實體模組

Goods商品POJO物件如下:

package com.zhangguo.ssm01.entity;

import java.io.Serializable;
import java.math.BigDecimal;

/**
 * 商品POJO
 */
public class Goods implements Serializable {
    private int id;
    private String name;
    private BigDecimal price;
    private String picture;

    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 BigDecimal getPrice() {
        return price;
    }

    public void setPrice(BigDecimal price) {
        this.price = price;
    }

    public String getPicture() {
        return picture;
    }

    public void setPicture(String picture) {
        this.picture = picture;
    }

    @Override
    public String toString() {
        return "Goods{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", price=" + price +
                ", picture='" + picture + '\'' +
                '}';
    }
}

六、完成Commons通用工具模組

commons通用模組主要是為專案中其它模組提供輔助功能,如utils工具類等內容:

依賴:

父模組的pom:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.zhangguo.ssm01</groupId>
    <artifactId>SSM01</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>Ssm01-common</module>
        <module>Ssm01-entity</module>
        <module>Ssm01-dao</module>
        <module>Ssm01-service</module>
        <module>Ssm01-webui</module>
    </modules>

    <properties>
        <!--專案內模組-->
        <Ssm01-common.version>1.0-SNAPSHOT</Ssm01-common.version>
        <Ssm01-entity.version>1.0-SNAPSHOT</Ssm01-entity.version>
        <Ssm01-dao.version>1.0-SNAPSHOT</Ssm01-dao.version>
        <Ssm01-service.version>1.0-SNAPSHOT</Ssm01-service.version>
        <Ssm01-webui.version>1.0-SNAPSHOT</Ssm01-webui.version>
        <jackson.version>2.7.4</jackson.version>
        <commons-lang3.version>3.4</commons-lang3.version>

        <!--通用部分-->
        <log4j.version>2.6.1</log4j.version>
        <junit.version>4.10</junit.version>
        <!--Spring-->
        <spring.version>4.3.0.RELEASE</spring.version>
        <aspectjweaver.version>1.8.9</aspectjweaver.version>
        <cglib.version>3.2.4</cglib.version>

        <!--mybatis-->
        <mybatis-spring.version>1.3.0</mybatis-spring.version>
        <mysql-connector-java.version>5.1.38</mysql-connector-java.version>
        <mybatis.version>3.4.1</mybatis.version>
        <c3p0.version>0.9.1.2</c3p0.version>

        <!--spring mvc-->
        <jstl.version>1.2</jstl.version>
        <servlet-api.version>3.0.1</servlet-api.version>
        <jsp-api.version>2.1</jsp-api.version>
        <hibernate.version>5.2.2.Final</hibernate.version>
        <commons-io.version>2.4</commons-io.version>
        <commons-fileupload.version>1.3.1</commons-fileupload.version>
        <freemarker.version>2.3.23</freemarker.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <!--專案內的依賴-->
            <dependency>
                <groupId>com.zhangguo.ssm01</groupId>
                <artifactId>Ssm01-common</artifactId>
                <version>${Ssm01-common.version}</version>
            </dependency>
            <dependency>
                <groupId>com.zhangguo.ssm01</groupId>
                <artifactId>Ssm01-entity</artifactId>
                <version>${Ssm01-entity.version}</version>
            </dependency>
            <dependency>
                <groupId>com.zhangguo.ssm01</groupId>
                <artifactId>Ssm01-dao</artifactId>
                <version>${Ssm01-dao.version}</version>
            </dependency>
            <dependency>
                <groupId>com.zhangguo.ssm01</groupId>
                <artifactId>Ssm01-service</artifactId>
                <version>${Ssm01-service.version}</version>
            </dependency>
            <dependency>
                <groupId>com.zhangguo.ssm01</groupId>
                <artifactId>Ssm01-webui</artifactId>
                <version>${Ssm01-webui.version}</version>
            </dependency>

            <!--common模組-->
            <!--jackson-->
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
                <version>${jackson.version}</version>
            </dependency>

            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-core</artifactId>
                <version>${jackson.version}</version>
            </dependency>

            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-annotations</artifactId>
                <version>${jackson.version}</version>
            </dependency>
            <!--apache-commons-->
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-lang3</artifactId>
                <version>${commons-lang3.version}</version>
            </dependency>

            <!--log4j日誌包 -->
            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-core</artifactId>
                <version>${log4j.version}</version>
            </dependency>
            <!-- JUnit單元測試工具 -->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>${junit.version}</version>
            </dependency>
            <!--Spring框架核心庫 -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <!-- aspectJ AOP 織入器 -->
            <dependency>
                <groupId>org.aspectj</groupId>
                <artifactId>aspectjweaver</artifactId>
                <version>${aspectjweaver.version}</version>
            </dependency>
            <dependency>
                <groupId>cglib</groupId>
                <artifactId>cglib</artifactId>
                <version>${cglib.version}</version>
            </dependency>

            <!--mybatis-spring介面卡 -->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis-spring</artifactId>
                <version>${mybatis-spring.version}</version>
            </dependency>
            <!--Spring java資料庫訪問包,在本例中主要用於提供資料來源 -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jdbc</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <!--mysql資料庫驅動 -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql-connector-java.version}</version>
            </dependency>
            <!-- mybatis ORM框架 -->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>${mybatis.version}</version>
            </dependency>
            <!--c3p0 連線池 -->
            <dependency>
                <groupId>c3p0</groupId>
                <artifactId>c3p0</artifactId>
                <version>${c3p0.version}</version>
            </dependency>


            <!-- Spring MVC -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context-support</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <!-- JSTL -->
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>jstl</artifactId>
                <version>${jstl.version}</version>
            </dependency>
            <!-- Servlet核心包 -->
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <version>${servlet-api.version}</version>
            </dependency>
            <!--JSP -->
            <dependency>
                <groupId>javax.servlet.jsp</groupId>
                <artifactId>jsp-api</artifactId>
                <version>${jsp-api.version}</version>
            </dependency>
            <!--JSR303 -->
            <dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-validator</artifactId>
                <version>${hibernate.version}</version>
            </dependency>
            <!--檔案上傳 -->
            <dependency>
                <groupId>commons-io</groupId>
                <artifactId>commons-io</artifactId>
                <version>${commons-io.version}</version>
            </dependency>
            <dependency>
                <groupId>commons-fileupload</groupId>
                <artifactId>commons-fileupload</artifactId>
                <version>${commons-fileupload.version}</version>
            </dependency>
            <!-- FreeMarker -->
            <dependency>
                <groupId>org.freemarker</groupId>
                <artifactId>freemarker</artifactId>
                <version>${freemarker.version}</version>
            </dependency>
        </dependencies>

    </dependencyManagement>

</project>
View Code

 

commons的pom:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>SSM01</artifactId>
        <groupId>com.zhangguo.ssm01</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>Ssm01-common</artifactId>

    <dependencies>
        <!--jackson-->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
        </dependency>

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
        </dependency>

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
        </dependency>
        <!--apache-commons-->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
        </dependency>
    </dependencies>
</project>

新增相應的工具類:

如封裝頁面返回結果的JSON:

package com.zhangguo.ssm01.common.utils;

import java.util.HashMap;
import java.util.Map;

/**
 * 返回資料封裝
 */
public class R extends HashMap<String, Object> {
    private static final long serialVersionUID = 1L;
    
    public R() {
        put("code", 1);
        put("msg", "success");
    }

    //錯誤時
    public static R error() {
        return error(500, "未知異常,請聯絡管理員");
    }
    
    public static R error(String msg) {
        return error(500, msg);
    }
    
    public static R error(int code, String msg) {
        R r = new R();
        r.put("code", code);
        r.put("msg", msg);
        return r;
    }

    //成功時
    public static R ok(String msg) {
        R r = new R();
        r.put("msg", msg);
        return r;
    }
    
    public static R ok(Map<String, Object> map) {
        R r = new R();
        r.putAll(map);
        return r;
    }
    
    public static R ok() {
        return new R();
    }

    public static R ok(Object data) {
        return new R().put("data",data);
    }

    @Override
    public R put(String key, Object value) {
        super.put(key, value);
        return this;
    }
}
View Code

太多了這裡不一一介紹。

結果:

七、完成DAO資料訪問模組

Spring學習總結(六)——Spring整合MyBatis完整示例

7.1、新增依賴

父模組宣告:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.zhangguo.ssm01</groupId>
    <artifactId>SSM01</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>Ssm01-common</module>
        <module>Ssm01-entity</module>
        <module>Ssm01-dao</module>
        <module>Ssm01-service</module>
        <module>Ssm01-webui</module>
    </modules>

    <properties>
        <!--專案內模組-->
        <Ssm01-common.version>1.0-SNAPSHOT</Ssm01-common.version>
        <Ssm01-entity.version>1.0-SNAPSHOT</Ssm01-entity.version>
        <Ssm01-dao.version>1.0-SNAPSHOT</Ssm01-dao.version>
        <Ssm01-service.version>1.0-SNAPSHOT</Ssm01-service.version>
        <Ssm01-webui.version>1.0-SNAPSHOT</Ssm01-webui.version>
        <jackson.version>2.7.4</jackson.version>
        <commons-lang3.version>3.4</commons-lang3.version>

        <!--通用部分-->
        <log4j.version>2.6.1</log4j.version>
        <junit.version>4.10</junit.version>
        <!--Spring-->
        <spring.version>4.3.0.RELEASE</spring.version>
        <aspectjweaver.version>1.8.9</aspectjweaver.version>
        <cglib.version>3.2.4</cglib.version>

        <!--mybatis-->
        <mybatis-spring.version>1.3.0</mybatis-spring.version>
        <mysql-connector-java.version>5.1.38</mysql-connector-java.version>
        <mybatis.version>3.4.1</mybatis.version>
        <c3p0.version>0.9.1.2</c3p0.version>

        <!--spring mvc-->
        <jstl.version>1.2</jstl.version>
        <servlet-api.version>3.0.1</servlet-api.version>
        <jsp-api.version>2.1</jsp-api.version>
        <hibernate.version>5.2.2.Final</hibernate.version>
        <commons-io.version>2.4</commons-io.version>
        <commons-fileupload.version>1.3.1</commons-fileupload.version>
        <freemarker.version>2.3.23</freemarker.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <!--專案內的依賴-->
            <dependency>
                <groupId>com.zhangguo.ssm01</groupId>
                <artifactId>Ssm01-common</artifactId>
                <version>${Ssm01-common.version}</version>
            </dependency>
            <dependency>
                <groupId>com.zhangguo.ssm01</groupId>
                <artifactId>Ssm01-entity</artifactId>
                <version>${Ssm01-entity.version}</version>
            </dependency>
            <dependency>
                <groupId>com.zhangguo.ssm01</groupId>
                <artifactId>Ssm01-dao</artifactId>
                <version>${Ssm01-dao.version}</version>
            </dependency>
            <dependency>
                <groupId>com.zhangguo.ssm01</groupId>
                <artifactId>Ssm01-service</artifactId>
                <version>${Ssm01-service.version}</version>
            </dependency>
            <dependency>
                <groupId>com.zhangguo.ssm01</groupId>
                <artifactId>Ssm01-webui</artifactId>
                <version>${Ssm01-webui.version}</version>
            </dependency>

            <!--common模組-->
            <!--jackson-->
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
                <version>${jackson.version}</version>
            </dependency>

            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-core</artifactId>
                <version>${jackson.version}</version>
            </dependency>

            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-annotations</artifactId>
                <version>${jackson.version}</version>
            </dependency>
            <!--apache-commons-->
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-lang3</artifactId>
                <version>${commons-lang3.version}</version>
            </dependency>

            <!--log4j日誌包 -->
            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-core</artifactId>
                <version>${log4j.version}</version>
            </dependency>
            <!-- JUnit單元測試工具 -->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>${junit.version}</version>
            </dependency>
            <!--Spring框架核心庫 -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <!-- aspectJ AOP 織入器 -->
            <dependency>
                <groupId>org.aspectj</groupId>
                <artifactId>aspectjweaver</artifactId>
                <version>${aspectjweaver.version}</version>
            </dependency>
            <dependency>
                <groupId>cglib</groupId>
                <artifactId>cglib</artifactId>
                <version>${cglib.version}</version>
            </dependency>

            <!--mybatis-spring介面卡 -->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis-spring</artifactId>
                <version>${mybatis-spring.version}</version>
            </dependency>
            <!--Spring java資料庫訪問包,在本例中主要用於提供資料來源 -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>