學習完MyBatis,Spring,SpringMVC以後,咱們須要作的就是將這三者聯繫起來,Spring實現業務對象管理,Spring MVC負責請求的轉發和視圖管理, MyBatis做爲數據對象持久化引擎。這樣搭配的優勢是:輕量、自由度高、Spring與Spring MVC契合度更好。經過一個圖書管理示例完成SSM框架的集成。html
經過圖書管理系統完成SSM框架的集成。java
Groupld:組織名mysql
artifactId:模塊名稱jquery
version:版本號web
在Maven世界中,每一個工程都有它惟一的 組織名、模塊名、版本 ,這三個就是maven項目的座標。一個maven工程能夠打包成jar、war、pom等形式,可是它們都是擁有上述三個座標的。咱們在項目過程當中導入的jar包就是經過上述座標值惟一肯定的。所以,咱們在建立一個maven工程時會要求指定具體的 組織名、模塊名、版本、打包方式。ajax
common模塊:通用模塊,不依賴其它任何模塊,主要有utils、能夠在多個不一樣項目中使用spring
entitie模塊:POJO、VO、DTOsql
dao模塊:數據持久化,訪問數據庫,這裏使用Mybatis數據庫
service模塊:業務模塊,處理業務邏輯apache
webui模塊:B/S結構的表示層,主要用於在瀏覽器中顯示數據,提供用戶接口
父模塊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.ssm.booksystem</groupId> <artifactId>BookSystem</artifactId> <packaging>pom</packaging> <version>1.0-SNAPSHOT</version> <modules> <module>Book-Common</module> <module>Book-Dao</module> <module>Book-Service</module> <module>Book-WEBUI</module> <module>Book-Entity</module> </modules> <properties> <!--模塊內部依賴--> <Book-Common.version>1.0-SNAPSHOT</Book-Common.version> <Book-Dao.version>1.0-SNAPSHOT</Book-Dao.version> <Book-Service.version>1.0-SNAPSHOT</Book-Service.version> <Book-Entity.version>1.0-SNAPSHOT</Book-Entity.version> <Book-WEBUI.version>1.0-SNAPSHOT</Book-WEBUI.version> <!--Common模塊管理--> <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.12</junit.version> <spring-test.version>4.3.18.RELEASE</spring-test.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>4.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.ssm.booksystem</groupId> <artifactId>Book-Common</artifactId> <version>${Book-Common.version}</version> </dependency> <dependency> <groupId>com.ssm.booksystem</groupId> <artifactId>Book-Dao</artifactId> <version>${Book-Dao.version}</version> </dependency> <dependency> <groupId>com.ssm.booksystem</groupId> <artifactId>Book-Service</artifactId> <version>${Book-Service.version}</version> </dependency> <dependency> <groupId>com.ssm.booksystem</groupId> <artifactId>Book-Entity</artifactId> <version>${Book-Entity.version}</version> </dependency> <dependency> <groupId>com.ssm.booksystem</groupId> <artifactId>Book-WEBUI</artifactId> <version>${Book-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> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring-test.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>
common模塊中的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> <artifactId>BookSystem</artifactId> <groupId>com.ssm.booksystem</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>Book-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>
Dao模塊中的pom.xml文件,這一層中咱們須要依賴common層和實體層,由於在這一層中咱們涉及到和數據庫打交道,一張表就對應一個POJO
<?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>BookSystem</artifactId> <groupId>com.ssm.booksystem</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>Book-Dao</artifactId> <dependencies> <dependency> <groupId>com.ssm.booksystem</groupId> <artifactId>Book-Common</artifactId> </dependency> <dependency> <groupId>com.ssm.booksystem</groupId> <artifactId>Book-Entity</artifactId> </dependency> <!--log4j日誌包 --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> </dependency> <!-- JUnit單元測試工具 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> </dependency> <!--Spring框架核心庫 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> </dependency> <!-- aspectJ AOP 織入器 --> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> </dependency> <dependency> <groupId>cglib</groupId> <artifactId>cglib</artifactId> </dependency> <!--mybatis-spring適配器 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> </dependency> <!--Spring java數據庫訪問包,在本例中主要用於提供數據源 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> </dependency> <!--mysql數據庫驅動 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <!-- mybatis ORM框架 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> </dependency> <!--c3p0 鏈接池 --> <dependency> <groupId>c3p0</groupId> <artifactId>c3p0</artifactId> </dependency> </dependencies> </project>
Service模塊中的pom.xml文件,這一層中咱們須要依賴dao層
<?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>BookSystem</artifactId> <groupId>com.ssm.booksystem</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>Book-Service</artifactId> <dependencies> <dependency> <groupId>com.ssm.booksystem</groupId> <artifactId>Book-Dao</artifactId> </dependency> </dependencies> </project>
實體層暫時不須要依賴任何的模塊,Entity模塊中的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> <artifactId>BookSystem</artifactId> <groupId>com.ssm.booksystem</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>Book-Entity</artifactId> </project>
Service模塊中的pom.xml文件,這一層中咱們須要依賴service層
<?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>BookSystem</artifactId> <groupId>com.ssm.booksystem</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>Book-WEBUI</artifactId> <packaging>war</packaging> <name>Book-WEBUI Maven Webapp</name> <!-- FIXME change it to the project's website --> <url>http://www.example.com</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.7</maven.compiler.source> <maven.compiler.target>1.7</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <dependency> <groupId>com.ssm.booksystem</groupId> <artifactId>Book-Service</artifactId> </dependency> <!-- Spring MVC --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> </dependency> <!-- Servlet核心包 --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> </dependency> <!--文件上傳 --> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> </dependency> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> </dependency> </dependencies> <build> <finalName>Book-WEBUI</finalName> <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) --> <plugins> <plugin> <artifactId>maven-clean-plugin</artifactId> <version>3.1.0</version> </plugin> <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging --> <plugin> <artifactId>maven-resources-plugin</artifactId> <version>3.0.2</version> </plugin> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.0</version> </plugin> <plugin> <artifactId>maven-surefire-plugin</artifactId> <version>2.22.1</version> </plugin> <plugin> <artifactId>maven-war-plugin</artifactId> <version>3.2.2</version> </plugin> <plugin> <artifactId>maven-install-plugin</artifactId> <version>2.5.2</version> </plugin> <plugin> <artifactId>maven-deploy-plugin</artifactId> <version>2.8.2</version> </plugin> </plugins> </pluginManagement> </build> </project>
這裏只展現了common層中的依賴,剩下的依賴也同樣
create table book( bid int auto_increment primary key not null COMMENT'圖書編號', bname varchar(50) not null COMMENT'圖書名稱', bauthor VARCHAR(50) COMMENT'圖書做者' ) INSERT into book(bname,bauthor)VALUES ('斗羅大陸','唐家三少'), ('假如給我三天光明','海倫凱勒'), ('鬥破蒼穹','天蠶土豆'), ('雪鷹領主','我吃西紅柿') SELECT * from book
文件配置是一項很是繁瑣的工做內容,稍有不慎整個項目就廢了,因此須要很是的細心纔有可能將這一整個項目搭建成功,不然將會一晚上之間回到解放前。因此我所操做的每個不你們都須要謹慎再謹慎。
子模塊common層
R.java
package com.booksystem.common; 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; } }
子模塊dao層
BookMapper.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!--命名空間應該是對應接口的包名+接口名 --> <mapper namespace="com.booksystem.dao.BookDao"> <!--查詢所有圖書信息--> <select id="getAllBooks" resultMap="bookMap"> select bid,bname,bauthor from book </select> <!--配置數據表和實體的映射關係--> <resultMap id="bookMap" type="book"> <id column="bid" property="bid"/> <result property="bname" column="bname"/> <result column="bauthor" property="bauthor"/> </resultMap> </mapper>
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd"> <!--1 引入屬性文件,在配置中佔位使用 --> <context:property-placeholder location="classpath*:db.properties" /> <!--2 配置C3P0數據源 --> <bean id="datasource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <!--驅動類名 --> <property name="driverClass" value="${mysql.driver}" /> <!-- url --> <property name="jdbcUrl" value="${mysql.url}" /> <!-- 用戶名 --> <property name="user" value="${mysql.uid}" /> <!-- 密碼 --> <property name="password" value="${mysql.password}" /> <!-- 當鏈接池中的鏈接耗盡的時候c3p0一次同時獲取的鏈接數 --> <property name="acquireIncrement" value="${mysql.acquireIncrement}"></property> <!-- 初始鏈接池大小 --> <property name="initialPoolSize" value="${mysql.initialPoolSize}"></property> <!-- 鏈接池中鏈接最小個數 --> <property name="minPoolSize" value="${mysql.minPoolSize}"></property> <!-- 鏈接池中鏈接最大個數 --> <property name="maxPoolSize" value="${mysql.maxPoolSize}"></property> </bean> <!--3 會話工廠bean sqlSessionFactoryBean --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- mybatis核心配置文件路徑 --> <property name="configLocation" value="classpath:mybatis.xml"></property> <!-- 數據源 --> <property name="dataSource" ref="datasource"/> <!-- sql映射文件路徑[mapper路徑] --> <property name="mapperLocations" value="classpath*:mapper/*Mapper.xml"></property> </bean> <!--4 自動掃描對象關係映射 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <!--指定會話工廠,若是當前上下文中只定義了一個則該屬性可省去 --> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/> <!-- 指定要自動掃描接口的基礎包,實現接口 --> <property name="basePackage" value="com.booksystem.dao"/> </bean> <!--5 聲明式事務管理 --> <!--定義事物管理器,由spring管理事務 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="datasource"></property> </bean> <!--支持註解驅動的事務管理,指定事務管理器 --> <tx:annotation-driven transaction-manager="transactionManager" /> <!--6 容器自動掃描IOC組件 --> <context:component-scan base-package="com.booksystem.dao"/> <!--7 aspectj支持自動代理實現AOP功能 --> <aop:aspectj-autoproxy/> </beans>
db.properties
##mysql鏈接字符串 #驅動 mysql.driver=com.mysql.jdbc.Driver #鏈接字符串 mysql.url=jdbc:mysql://localhost:3306/booksystem?useUnicode=true&characterEncoding=UTF-8 #用戶名 mysql.uid=root #密碼 mysql.password=123456 mysql.acquireIncrement=5 mysql.initialPoolSize=10 mysql.minPoolSize=5 mysql.maxPoolSize=20
mybatis.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <properties resource="db.properties"></properties> <settings> <!--指定mybatis使用日誌組件 --> <setting name="logImpl" value="STDOUT_LOGGING"/> </settings> <!--設置別名--> <typeAliases> <package name="com.booksystem.entity"/> </typeAliases> </configuration>
BookDao,java
package com.booksystem.dao; import com.booksystem.entity.Book; import java.util.List; public interface BookDao { //查詢所有圖書信息 public List<Book> getAllBooks(); }
子模塊entity層
Book.java
package com.booksystem.entity; /* *圖書實體類 * */ public class Book { private long bid; //圖書編號 private String bname; // 圖書名稱 private String bauthor; // 圖書做者 public long getBid() { return bid; } public void setBid(long bid) { this.bid = bid; } public String getBname() { return bname; } public void setBname(String bname) { this.bname = bname; } public String getBauthor() { return bauthor; } public void setBauthor(String bauthor) { this.bauthor = bauthor; } //無參構造方法 public Book(){} //帶參構造方法 public Book(long bid, String bname, String bauthor) { this.bid = bid; this.bname = bname; this.bauthor = bauthor; } @Override public String toString() { return "Book{" + "bid=" + bid + ", bname='" + bname + '\'' + ", bauthor='" + bauthor + '\'' + '}'; } }
寫了怎麼多的東西,咱們須要測試一下,減小錯誤,如今咱們只是在作練習,代碼量比較少可是到了真正項目的時候代碼量確定比如今多許多,爲了養成這種習慣,我通常寫到Dao層的時候就進行測試一下。
BookTest.java
package com.booksystem.dao; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.annotation.Rollback; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.transaction.annotation.Transactional; import static org.junit.Assert.*; //指定bean注入的配置文件 @ContextConfiguration("/applicationContext.xml") //使用標準的junit @RunWith(SpringJUnit4ClassRunner.class) @Transactional //事務管理 @Rollback(true) //是否回滾 public class BookDaoTest { @Autowired private BookDao bookDao; @Test public void getAllBooks() { System.out.println(bookDao.getAllBooks()); } }
咱們看到測試結果已經出來了,若是這一步你成功了的話那麼你已經完成了80%了,下一步的話咱們就配置service層
子模塊service層
BookService
package com.booksystem.service; import com.booksystem.entity.Book; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; public interface BookService { //查詢所有圖書信息 public List<Book> getAllBooks(); }
BookImple
package com.booksystem.imple; import com.booksystem.dao.BookDao; import com.booksystem.entity.Book; import com.booksystem.service.BookService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @Service public class BookImple implements BookService { @Autowired public BookDao bookDao; public List<Book> getAllBooks() { return bookDao.getAllBooks(); } }
子模塊webui層
咱們發如今這一層中沒有存放源代碼的文件加,因此咱們須要本身添加,選擇file,project structure
生成以後的目錄
BookController.java
package com.book.controller; import com.booksystem.common.R; import com.booksystem.service.BookService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @Controller @RequestMapping("/book") public class BookController { @Autowired public BookService bookService; @GetMapping("/getAllBook") @ResponseBody public R getAllBook(){ return R.ok(bookService.getAllBooks()); } }
springmvc-servlet.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd"> <!-- 自動掃描包,實現支持註解的IOC --> <context:component-scan base-package="com.booksystem" /> <!-- Spring MVC不處理靜態資源 --> <mvc:default-servlet-handler /> <!-- 支持mvc註解驅動 --> <mvc:annotation-driven enable-matrix-variables="true" /> <!-- 配置映射媒體類型的策略 --> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"> <property name="removeSemicolonContent" value="false" /> </bean> <!-- 內部視圖解析器,JSP與JSTL模板 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver"> <!--指定視圖渲染類 --> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> <!--自動添加到路徑中的前綴 --> <property name="prefix" value="/WEB-INF/views/" /> <!--自動添加到路徑中的後綴 --> <property name="suffix" value=".html" /> <!--設置全部視圖的內容類型,若是視圖自己設置內容類型視圖類能夠忽略 --> <property name="contentType" value="text/html;charset=UTF-8" /> <!-- 優先級,越小越前 --> <property name="order" value="1" /> </bean> <!--文件上傳解析器 --> <!--Spring MVC默認不能識別multipart格式的文件內容 --> <bean id="multipartResolver" class="org.springframework.web.multipart.support.StandardServletMultipartResolver"> </bean> <mvc:cors> <mvc:mapping path="/**" allowed-origins="*" allowed-methods="POST,GET, OPTIONS,DELETE,PUT" allowed-headers="Content-Type,ContentType,Access-Control-Allow-Headers, Authorization, X-Requested-With" allow-credentials="true"/> </mvc:cors> </beans>
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <welcome-file-list> <!--歡迎頁--> <welcome-file>index.html</welcome-file> </welcome-file-list> <listener> <description>Spring容器加載監聽器</description> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <context-param> <description>設置Spring加載時的配置文件位置,默認位置在WEB-INF/lib目錄下</description> <param-name>contextConfigLocation</param-name> <param-value>classpath*:applicationContext.xml</param-value> </context-param> <!--Spring MVC 前置Servlet,中心控制器 --> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <!--Spring MVC配置文件路徑 --> <param-value>classpath*:springmvc-servlet.xml</param-value> </init-param> <!-- 啓動動優先級,越小越早加載 --> <load-on-startup>1</load-on-startup> <!--Servlet3.0以上文件上傳配置 --> <multipart-config> <!--上傳文件的最大限制5MB --> <max-file-size>5242880</max-file-size> <!--請求的最大限制20MB --> <max-request-size>20971520</max-request-size> <!--當文件的大小超過臨界值時將寫入磁盤 --> <file-size-threshold>0</file-size-threshold> </multipart-config> </servlet> <!-- Servlet訪問的路徑映射,全部的訪問都必須通過調度用的前置控制品 --> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <!--編碼過濾器 --> <filter> <filter-name>characterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <!-- 路徑映射 --> <filter-mapping> <filter-name>characterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
在這裏咱們就將項目進行熱部署就能夠了,咱們在開發階段就暫時不進行打包,之後咱們有服務器的時候就能夠打包成war或者jar包
index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>圖書管理系統</title> <style> h1{ text-align: center; } #myTab{ width: 800px; margin: 0 auto; } </style> </head> <body> <h1>圖書管理系統</h1> <table id="myTab" cellpadding="0" cellspacing="0" border="1"> <tr> <td>編號</td> <td>名稱</td> <td>做者</td> </tr> </table> <script src="js/jquery-1.11.3.min.js"></script> <script> $.ajax({ url:'/book/getAllBook', type:'get', dataType:'json', }).done(function (data) { if(data.code===1){ $("#myTab tr:not(:eq(0))").remove(); for (var i=0;i<data.data.length;i++){ var tr="<tr>"; tr+="<td>"+(i+1)+"</td>"; tr+="<td>"+data.data[i].bname+"</td>"; tr+="<td>"+data.data[i].bauthor+"</td>"; tr+="</tr>" $("#myTab").append(tr); } } }) </script> </body> </html>