IDEA集成SSM框架(SpringMVC+Spring+MyBatis)

前言

學習完MyBatis,Spring,SpringMVC以後,咱們須要作的就是將這三者聯繫起來,Spring實現業務對象管理,Spring MVC負責請求的轉發和視圖管理, MyBatis做爲數據對象持久化引擎。這樣搭配的優勢是:輕量、自由度高、Spring與Spring MVC契合度更好。經過一個圖書管理示例完成SSM框架的集成。html

本章目標

經過圖書管理系統完成SSM框架的集成。java

項目構建

一.父模塊

1.咱們打開idea選擇create new project,而後選擇Maven項目,咱們暫時先不要選擇maven骨架,等咱們的視圖層(WEB-UI層)的時候再選擇maven骨架

2.這一步輸入組織名,模塊名稱

Groupld:組織名mysql

artifactId:模塊名稱jquery

version:版本號web

在Maven世界中,每一個工程都有它惟一的 組織名模塊名版本 ,這三個就是maven項目的座標。一個maven工程能夠打包成jar、war、pom等形式,可是它們都是擁有上述三個座標的。咱們在項目過程當中導入的jar包就是經過上述座標值惟一肯定的。所以,咱們在建立一個maven工程時會要求指定具體的 組織名、模塊名、版本、打包方式。ajax

二.子模塊(common層)

1.建立子模塊common層,而後點擊next

 

三.子模塊(Dao層)

1.子模塊Dao層和Comon同樣,這裏就再也不作過多的描述了

2.直接完成最後一步

四.子模塊(Service層)

1.同理,如上

五.子模塊(Entity層)

1.實體層和mmon層同樣都是一樣的操做步驟,這裏咱們就不進行截圖了,操做步驟都同樣

六.子模塊(WEB-UI層)

1.子模塊web-ui層須要講一下,由於咱們這一層是視圖層,因此咱們須要選擇maven骨架。

2.而後點擊next,輸入模塊名以後finish就能夠了,在這裏咱們須要選擇本身本地的中央倉庫。自此咱們的多模塊項目已經搭建好了

3.完整的項目結構以下:

4.在這裏咱們發現視圖層多了webapp這個文件夾,之後的開發過程當中咱們的視圖都是放在WEB_INF目錄下的

common模塊:通用模塊,不依賴其它任何模塊,主要有utils、能夠在多個不一樣項目中使用spring

entitie模塊:POJO、VO、DTOsql

dao模塊:數據持久化,訪問數據庫,這裏使用Mybatis數據庫

service模塊:業務模塊,處理業務邏輯apache

webui模塊:B/S結構的表示層,主要用於在瀏覽器中顯示數據,提供用戶接口

模塊依賴

(1)父模塊依賴

1.接下來咱們去父模塊的pom.xml文件進行統一的模塊管理,爲了方便管理版本和後續添加依賴不那麼繁瑣,咱們在父模塊pom.xml文件中只對依賴進行統一管理起來,而不進行依賴,當咱們須要哪個依賴的時候,咱們只須要引入便可。

父模塊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>
View Code

(2)子模塊Comon層模塊依賴

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>
View Code

(3)子模塊Dao層模塊依賴

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>
View Code

(4)子模塊Service層模塊依賴

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>
View Code

(5)子模塊Entity層模塊依賴

實體層暫時不須要依賴任何的模塊,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>
View Code

(6)子模塊WEB-UI層模塊依賴

 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>
View Code

(7)最終的依賴效果

這裏只展現了common層中的依賴,剩下的依賴也同樣

鏈接數據庫

1.這是navicat的操做界面,前面的一些鏈接配置我在這裏就不進行過多的描述了。

  

2.右鍵localhost_3306選擇新建數據庫,輸入數據的名稱,字符集咱們選擇倒數第二個,也就是utf-8的而後肯定就可了

 

3.數據庫腳本

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
View Code

文件配置

文件配置是一項很是繁瑣的工做內容,稍有不慎整個項目就廢了,因此須要很是的細心纔有可能將這一整個項目搭建成功,不然將會一晚上之間回到解放前。因此我所操做的每個不你們都須要謹慎再謹慎。

1.首先咱們先移除父模塊的src目錄,其實移不移除都無所謂,在這裏我主要是爲了影響干擾,移除以後目錄以下

  

2.咱們須要在每個子模塊添加對應的包名和配置文件

子模塊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;
    }
}
View Code

子模塊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>
View Code

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>
View Code

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>
View Code

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 + '\'' +
            '}';
  }
}
View Code

寫了怎麼多的東西,咱們須要測試一下,減小錯誤,如今咱們只是在作練習,代碼量比較少可是到了真正項目的時候代碼量確定比如今多許多,爲了養成這種習慣,我通常寫到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());
    }
}
View Code

咱們看到測試結果已經出來了,若是這一步你成功了的話那麼你已經完成了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>
View Code

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>
View Code

3.配置tomcat

4.項目部署

在這裏咱們就將項目進行熱部署就能夠了,咱們在開發階段就暫時不進行打包,之後咱們有服務器的時候就能夠打包成war或者jar包

5.啓動項目

 

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>
相關文章
相關標籤/搜索