《Spring 3.0就这么简单》——1.3 环境准备

  1. 云栖社区>
  2. 博客>
  3. 正文

《Spring 3.0就这么简单》——1.3 环境准备

异步社区 2017-05-31 13:45:51 浏览1315
展开阅读全文

本节书摘来自异步社区《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:actionSpringchapter,并选择项目类型为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="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.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="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>
         <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配置文件即可。

网友评论

登录后评论
0/500
评论
异步社区
+ 关注