閱讀813 返回首頁    go 阿裏雲 go 技術社區[雲棲]


《Spring 3.0就這麼簡單》——1.3 環境準備

本節書摘來自異步社區《Spring 3.0就這麼簡單》一書中的第1章,第1.3節,作者: 陳雄華 , 林開雄著,更多章節內容可以訪問雲棲社區“異步社區”公眾號查看

1.3 環境準備

1.3.1 創建庫表
(1)啟動MySQL數據庫後,用DOS命令窗口登錄數據庫。

mysql>mysql –uroot –p1234 --port 3309
分別指定用戶名和密碼,MySQL默認運行在3306端口,如果不是運行在默認端口,需要通過--port參數指定端口號。

(2)運行以下腳本,創建實例對應的數據庫。

mysql>DROP DATABASE IF EXISTS sampledb;
mysql>CREATE DATABASE sampledb DEFAULT CHARACTER SET utf8;
mysql>USE sampledb;

數據庫名為sampledb,默認字符集采用UTF-8。

(3)創建實例所用的兩張表。

##創建用戶表
mysql>CREATE TABLE t_user (
         user_id   INT AUTO_INCREMENT PRIMARY KEY,
         user_name VARCHAR(30),
         password  VARCHAR(32),
         last_visit datetime,
         last_ip  VARCHAR(23)
)ENGINE=InnoDB; 
##創建用戶登錄日誌表
mysql>CREATE TABLE t_login_log (
         login_log_id  INT AUTO_INCREMENT PRIMARY KEY,
         user_id   INT,
         ip  VARCHAR(23),
         login_datetime datetime
)ENGINE=InnoDB;

t_user表為用戶信息表,t_login_log為用戶登錄日誌表。其中ENGINE=InnoDB指定表的引擎為InnoDB類型,該類型表支持事務。MySQL默認采用MyISAM引擎,該類型表不支持事務,僅存儲數據,優點在於讀寫很快。對於景區網站型應用係統的表來說,大可使用不支持事務的MyISAM引擎,但本書出於演示事務的目的,所有表均采用支持事務的InnoDB引擎。

(4)初始化一條數據,用戶名/密碼為admin/123456。

##插入初始化數據
mysql>INSERT INTO t_user (user_name,password) VALUES('admin','123456');
mysql>COMMIT;

用戶也可以直接運行腳本文件來完成以上所有工作,創建數據庫表的腳本文件位於chapter1/src/main/schema/sampledb.sql,下麵提供了兩種運行腳本的方法。

直接通過mysql命令運行。
假設從github.com下載本書示例代碼中的內容並複製到D:\actionSpring目錄下,則在DOS命令窗口中運行以下命令。

D:\> mysql -u root -p1234 --port 3309 <D:\actionSpring\chapter1\schema\sampledb.sql
也可以在登錄MySQL後,通過source命令運行腳本。
mysql>source D:\actionSpring\chapter1\src\main\schema\sampledb.sql

1.3.2 建立工程
考慮到IntelliJ IDEA 是一款非常優秀且強大的IDE工具,特別是對Maven等工具提供了良好支持,越來越受企業開發人員的喜愛。本書的所有示例都采用IDEA(11.0版本)進行開發。將IDEA的工作空間設置於D:\actionSpring,為了避免因路徑不一致而引起的各種問題,請盡量保證工作空間和本書的路徑一致。示例工程源文件和配置文件都使用UTF-8編碼格式,UTF-8可以很好地解決國際化問題,同時避免不受歡迎的中文亂碼問題,用戶可以執行File→Settings→File Encodings命令將IDEA的工作空間編碼格式設置為UTF-8編碼格式。

在D:\actionSpring中建立一個名為chapter的Maven主工程項目,如圖1-4所示。

設置項目名稱為chapter,項目路徑為D:\actionSpring\chapter,並選擇項目類型為Maven Module,單擊Next按鈕,進入Maven工程設置窗口,如圖1-5所示。

設置Maven的GroupId為com.smart,ArtifactId為chapter,Version版本號為3.1-SNAPSHOT之後,單擊Finish按鈕完成主工程的創建,之後所有章節的代碼示例將在這個主工程上以模塊的方式進行創建。接下來,就可以創建本章示例的模塊chapter1,可以通過File→New Module→Add Module對話框來實現,如圖1-6所示。

選擇Create module from scratch選項,並單擊Next按鈕進入模塊設置窗口,如圖1-7所示。

設置模塊的名稱為chapter1,選擇類型為Maven Module,其他保持默認值即可,單擊Next按鈕,完成模塊創建。後麵所有章節的示例代碼都將以Maven模塊的方式進行創建,如第2章,模塊的名稱為chapter2,其他章節依次類推。創建之後工程模塊的目錄結構如圖1-8所示。

screenshot

圖1-4 創建工程

screenshot

圖1-5 設置Maven工程

screenshot

圖1-6 創建Maven Module
screenshot

圖1-7 配置Module

screenshot

圖1-8 Maven工程目錄結構

創建項目工程後,修改主工程模塊的pom.xml文件,設置主工程模塊標識、子模塊公共依賴庫等信息(關於pom.xm詳細配置將在第9章中介紹),作為所有子模塊父模塊,如代碼清單1-1所示。

代碼清單1-1 主工程模塊pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="https://maven.apache.org/POM/4.0.0"
                xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
                xsi:schemaLocation="https://maven.apache.org/POM/4.0.0 
                https://maven.apache.org/xsd/maven-4.0.0.xsd">
           <modelVersion>4.0.0</modelVersion>
           <groupId>com.smart</groupId>
           <artifactId>chapter</artifactId>
           <packaging>pom</packaging>
           <version>3.1-SNAPSHOT</version>
           <name>Spring3.1</name>
           <description>Spring3.1</description>
           <properties>
                <file.encoding>UTF-8</file.encoding>
                <java.version>1.6</java.version>
<org.springframework.version>3.1.1.RELEASE</org.springframework.version>*
<mysql.version>5.1.6</mysql.version>**
…
           </properties>
           <modules>
                <module>chapter1</module>
           </modules>
</project>

配置了chapter主工程模塊pom.xml之後,就開始配置在第1章模塊chapter1中生成的pom.xml文件中配置項目工程中需要的依賴相關類庫,如代碼清單1-2所示。

代碼清單1-2 chapter1模塊pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="https://maven.apache.org/POM/4.0.0"
            xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="https://maven.apache.org/POM/4.0.0 https://maven.apache.org/ xsd/maven-4.0.0.xsd">
    <parent>
         <groupId>actionspring</groupId>
         <artifactId>chapter </artifactId>
         <version>3.1-SNAPSHOT</version>
     </parent> <!--引用父模塊 -->
     <modelVersion>4.0.0</modelVersion>
     <artifactId>chapter1</artifactId>
     <version>3.1-SNAPSHOT</version>
     <name>第一章示例</name>
     <description>Spring 快速入門</description>
     <packaging>war</packaging>
     <dependencies>
<!--依賴的Spring模塊類庫 -->
          <dependency>
               <groupId>org.springframework</groupId>
               <artifactId>spring-beans</artifactId>
               <version> ${org.springframework.version} </version>
          </dependency>
          <dependency>
               <groupId>org.springframework</groupId>
               <artifactId>spring-jdbc</artifactId>
               <version>${org.springframework.version}</version>
          </dependency>
          <dependency>
               <groupId>org.springframework</groupId>
               <artifactId>spring-web</artifactId>
               <version> ${org.springframework.version}</version>
          </dependency>
          <dependency>
               <groupId>org.springframework</groupId>
               <artifactId>spring-webmvc</artifactId>
               <version>${org.springframework.version}</version>
          </dependency>
<!-- 依賴的持久化類庫-->
          <dependency>
               <groupId>mysql</groupId>
               <artifactId>mysql-connector-java</artifactId>
              <version>${mysql.version}</version>
          </dependency>
<!--依賴的公共模塊類庫-->
          <dependency>
               <groupId>commons-dbcp</groupId>
               <artifactId>commons-dbcp</artifactId>
               <version>${commons-dbcp.version}</version>
          </dependency>
          <dependency>
               <groupId>org.aspectj</groupId>
               <artifactId>aspectjweaver</artifactId>
               <version>${aspectjweaver.version}</version>
          </dependency>
          <dependency>
               <groupId>org.apache.commons</groupId>
               <artifactId>com.springsource.org.apache.commons.logging</artifactId>
               <version>${apache.commons.version}</version>
          </dependency>
          <dependency>
               <groupId>fakepath</groupId>
               <artifactId>com.springsource.net.sf.cglib</artifactId>
               <version>1.1.3</version>
          </dependency>
<!--依賴的Web模塊類庫-->
          <dependency>
               <groupId>javax.servlet.jsp</groupId>
               <artifactId>jsp-api</artifactId>
               <version>${jsp-api.version}</version>
               <scope>provided</scope>
          </dependency>
          <dependency>
               <groupId>taglibs</groupId>
               <artifactId>standard</artifactId>
               <version>${standard.version}</version>
               <scope>runtime</scope>
          </dependency>
          <dependency>
               <groupId>javax.servlet</groupId>
               <artifactId>servlet-api</artifactId>
               <version>${servlet-api.version}</version>
          </dependency>
          <dependency>
               <groupId>javax.servlet</groupId>
               <artifactId>jstl</artifactId>
               <version>${jstl.version}</version>
          </dependency>
      </dependencies>
</project>

配置了主工程模塊 chapter 及第 1 章子模塊chapter1 的模塊信息之後,單擊 IDEA 工程右邊的Maven Projects 選項卡,彈出Maven項目的管理窗口。IDEA提供了非常友好的Maven項目管理界麵,如圖 1-9 所示,單擊管理窗口中的刷新按鈕,可以列出當前所有的Maven模塊。每個模塊都包含兩個子節點Lifecycle及Dependencies,其中Lifecycle子節點下提供常用的Maven操作命令,如清理、驗證、編譯、測試、打包、部署等,Dependencies子節點列出當前模塊所有依賴的類庫。

screenshot

圖1-9 Maven項目的管理界麵

1.3.3 類包及Spring配置文件規劃
類包規劃
類包以分層的方式進行組織,共劃分為4個包,分別是dao、domain、service和web。領域對象從嚴格意義上講屬於業務層,但由於領域對象可能還同時被持久層和展現層共享,所以一般將其單獨劃分到一個包中,如圖1-10所示。

單元測試的類包和程序的類包對應,但放置在不同的文件夾下,如圖1-11所示。本實例僅對業務層的業務類進行單元測試。將程序類和測試類放置在物理不同的文件夾下,方便將來程序的打包和分發,因為測試類僅在開發時有用,無須包含到部署包中。在本章的後續內容中,讀者將會看到如何用Maven工具進行程序打包,體會這種包及目錄的設計結構所帶來的好處。

實戰經驗

隨著項目規模的增大,這種僅以分層思想規劃的包結構馬上就會顯示出它的不足,一般情況下需要在業務模塊包下,進一步按分層模塊劃分子包,如user/dao、user/service、viewspace/dao、viewspace/service等。對於由若幹獨立的子係統組成的大型應用,在業務分層包的前麵一般還需要加上子係統的前綴。包的規劃對於大型的應用特別重要,它直接關係到應用部署和分發的方便性。

screenshot

圖1-10 主程序包的規劃

screenshot

圖1-11 測試包的規劃

Spring配置文件規劃
Spring可以將所有的配置信息統一到一個文件中,也可以放置到多個文件中。對於簡單的應用來說,由於配置信息少,僅用一個配置文件就足以應付。隨著應用規模的擴大,配置信息量的增多,僅僅使用一個配置文件往往難以滿足要求,如果不進行仔細規劃,就會給配置信息的查看和團隊協作帶來負麵影響。

配置文件在團隊協作時是資源爭用的焦點,對於大型的應用一般要按模塊進行劃分,以在一定程度上降低爭用,減少團隊協作的版本控製衝突。因此,應用比較小時,直接采用一個applicationContext.xml配置文件即可。

最後更新:2017-05-31 14:01:49

  上一篇:go  《Spring 3.0就這麼簡單》——1.4 持久層
  下一篇:go  國家電網應用北鬥精準服務開展規模化應用