IDEA建立Maven項目Spring+SpringMVC+MyBatis(SSM)框架集成

1、SSM

  簡介:Spring+SpringMVC+MyBatis有一個簡稱SSM,Spring實現業務對象管理,Spring MVC負責請求的轉發和視圖管理, MyBatis做爲數據對象持久化引擎。html

     這樣搭配的優勢是:輕量、自由度高、Spring與Spring MVC契合度更好。經過一個商品管理示例完成SSM框架的集成,能夠將前面學習過的一些內容整合起來。前端

 SpringMVC

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

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

  3.Controller調用業務邏輯處理後,返回ModelAndViewjquery

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

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

  

  

 Spring

  1.Spring是一個輕量級的控制反轉(IOC)和麪向切面(AOP)的容器架構,IOC容器包含並管理應用對象的配置和生命週期,spring

   你能夠配置你的每一個bean如何被建立,也能夠配置每一個bean是隻有一個實例,仍是每次須要時都生成一個新的實例,以及它們是如何相互關聯的。sql

  2.IOC思想最核心的地方在於,資源不禁使用資源的雙方管理,而由不使用資源的第三方管理,這能夠帶來不少好處。數據庫

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

  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命令。

 Maven多模塊

  一、Java項目管理工具,主要功能是統一開發規範與包的依賴管理。便於後期的維護,通常會進行分層開發,分層以後,各個層之間的職責會比較明確,

       後期維護起來也相對比較容易(POM(Project Object Model)項目對象模型)

2、建立項目

一、直接建立Maven項目

建立完成後,右下角有個提示,是否自動導入Maven

建立模塊

建立工具層

建立dao層

建立servers層

建立entity(實體層)

建立ui層,ui層要選入骨架

選中Maven創庫

項目基本的建立完成了

 

再ui層裏面的main建立java文件夾resource文件夾而且設置文件屬性

ui層目錄建立結果以下

項目建立好後。開始添加依賴包,使用maven:

 

SSM的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.yangwansheng.ssm</groupId>
    <artifactId>SSM</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>ssm_common</module>
        <module>ssm_dao</module>
        <module>ssm_servers</module>
        <module>ssm_ui</module>
        <module>ssm_entitys</module>
    </modules>
    <!--項目包的版本管理-->
    <properties>
        <!--項目模塊-->
        <ssm_common.version>1.0-SNAPSHOT</ssm_common.version>
        <ssm_dao.version>1.0-SNAPSHOT</ssm_dao.version>
        <ssm_servers.version>1.0-SNAPSHOT</ssm_servers.version>
        <ssm_ui.version>1.0-SNAPSHOT</ssm_ui.version>
        <ssm_entitys.version>1.0-SNAPSHOT</ssm_entitys.version>
        <!--外部引入的項目版本管理-->
        <!--json-->
        <jackson.version>2.7.4</jackson.version>
        <!--common輔助層-->
        <commons-lang3.version>3.4</commons-lang3.version>
        <!--log4j日記-->
        <log4j.version>2.6.1</log4j.version>
        <!--單元測試 junt-->
        <junit.version>4.12</junit.version>
        <spring-test.version>4.3.18.RELEASE</spring-test.version>
        <!-- Spring RELEASE 爲最新的官方版本-->
        <spring.version>4.3.0.RELEASE</spring.version>
        <!-- aspectJ AOP 織入器 -->
        <aspectjweaver.version>1.8.9</aspectjweaver.version>
        <cglib.version>3.2.4</cglib.version>
        <spring-mybatis>1.3.0</spring-mybatis>
        <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>
        <!--Service核心-->
        <javax.version>3.0.1</javax.version>
        <!--JSTL-->
        <jstl.version>1.2</jstl.version>
        <!--jsp-api-->
        <jsp-api.version>2.1</jsp-api.version>
        <!--freemarker-->
        <freemarker.version>2.3.23</freemarker.version>
        <!--spring-context-support-->
        <spring-context.version>5.1.1.RELEASE</spring-context.version>
        <!--commons-io-->
        <commons-io.version>2.4</commons-io.version>
        <!--commons-fileupload-->
        <commons-fileupload.version>1.3.1</commons-fileupload.version>
        <!--JSR303 -->
        <hibernate.version>5.2.2.Final</hibernate.version>
    </properties>
    <dependencyManagement>
        <!--引入包-->
        <dependencies>
            <!--引入項目模塊包-->
            <dependency>
                <groupId>com.yangwansheng.ssm</groupId>
                <artifactId>ssm_common</artifactId>
                <version>${ssm_common.version}</version>
            </dependency>
            <dependency>
                <groupId>com.yangwansheng.ssm</groupId>
                <artifactId>ssm_dao</artifactId>
                <version>${ssm_dao.version}</version>
            </dependency>
            <dependency>
                <groupId>com.yangwansheng.ssm</groupId>
                <artifactId>ssm_servers</artifactId>
                <version>${ssm_servers.version}</version>
            </dependency>
            <dependency>
                <groupId>com.yangwansheng.ssm</groupId>
                <artifactId>ssm_ui</artifactId>
                <version>${ssm_ui.version}</version>
            </dependency>
            <dependency>
                <groupId>com.yangwansheng.ssm</groupId>
                <artifactId>ssm_entitys</artifactId>
                <version>${ssm_entitys.version}</version>
            </dependency>
            <!--外部引入包管理-->
            <!--json-->
            <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>${spring-mybatis}</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>
            <!--Servlet核心-->
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <version>${javax.version}</version>
                <scope>provided</scope>
            </dependency>
            <!-- JSTL -->
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>jstl</artifactId>
                <version>${jstl.version}</version>
            </dependency>
            <!--JSP應用程序接口 -->
            <dependency>
                <groupId>javax.servlet.jsp</groupId>
                <artifactId>jsp-api</artifactId>
                <version>${jsp-api.version}</version>
                <scope>provided</scope>
            </dependency>
            <!-- FreeMarker -->
            <dependency>
                <groupId>org.freemarker</groupId>
                <artifactId>freemarker</artifactId>
                <version>${freemarker.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context-support</artifactId>
                <version>${spring-context.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>
            <!--JSR303 -->
            <dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-validator</artifactId>
                <version>${hibernate.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

</project>

 

咱們只要把有須要的包引入對應的模塊中,模塊之間的引用是有繼承

ssm_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>SSM</artifactId>
        <groupId>com.yangwansheng.ssm</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>ssm_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>

ssm_dao層的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>SSM</artifactId>
        <groupId>com.yangwansheng.ssm</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>ssm_dao</artifactId>
    <dependencies>
        <!--引入項目模塊-->
        <dependency>
            <groupId>com.yangwansheng.ssm</groupId>
            <artifactId>ssm_common</artifactId>
        </dependency>
        <dependency>
            <groupId>com.yangwansheng.ssm</groupId>
            <artifactId>ssm_entitys</artifactId>
        </dependency>
        <!--log4j日誌包 -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
        </dependency>
        <!--單元測試-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </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>
        </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>

 

ssm_entitys實體層不用導入包,這個層只是放一些實體類的。

ssm_servers層的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>SSM</artifactId>
        <groupId>com.yangwansheng.ssm</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>ssm_servers</artifactId>
    <dependencies>
        <!--引入dao層,會自動繼承dao層裏面的包-->
        <dependency>
            <groupId>com.yangwansheng.ssm</groupId>
            <artifactId>ssm_dao</artifactId>
        </dependency>
    </dependencies>

</project>

 ssm_ui層的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>SSM</artifactId>
        <groupId>com.yangwansheng.ssm</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>ssm_ui</artifactId>
    <packaging>war</packaging>

    <name>ssm_ui 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.yangwansheng.ssm</groupId>
            <artifactId>ssm_servers</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>
        <!-- JSTL -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
        </dependency>
        <!-- Servlet核心包 -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
        </dependency>
        <!--JSP -->
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
        </dependency>
        <!--JSR303 -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
        </dependency>
        <!--文件上傳 -->
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
        </dependency>
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
        </dependency>
        <!-- FreeMarker -->
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
        </dependency>
    </dependencies>

    <build>
        <finalName>ssm_ui</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>

完成後的包層:下面中的ssm_dao層繼承了ssm_common層的包

在ssm_entitys下的main裏面的java文件建立包

結果:

 

在該java包下建立實體類:

 

Supplier實體類內容以下:

package com.yangwansheng.ssm.ssm_entitys; public class Supplier { int SupplierNo; String SuppierName; String Address; String Phone; String Contact; }

 

寫好屬性後,在空白地區右鍵

進行自動的寫get、set方法,和toString方法

最後的Supplier實體類內容以下

package com.yangwansheng.ssm.ssm_entitys; public class Supplier { int SupplierNo; String SuppierName; String Address; String Phone; String Contact; public int getSupplierNo() { return SupplierNo; } public void setSupplierNo(int supplierNo) { SupplierNo = supplierNo; } public String getSuppierName() { return SuppierName; } public void setSuppierName(String suppierName) { SuppierName = suppierName; } public String getAddress() { return Address; } public void setAddress(String address) { Address = address; } public String getPhone() { return Phone; } public void setPhone(String phone) { Phone = phone; } public String getContact() { return Contact; } public void setContact(String contact) { Contact = contact; } @Override public String toString() { return "Supplier{" +
                "SupplierNo=" + SupplierNo +
                ", SuppierName='" + SuppierName + '\'' +
                ", Address='" + Address + '\'' +
                ", Phone='" + Phone + '\'' +
                ", Contact='" + Contact + '\'' +
                '}'; } }

在ssm_dao層的resource文件中建立mapper文件

在ssm_dao層的resource文件中建立文件db.properties文件

db.properties文件用來寫鏈接數據庫驅動、數據庫、用戶名、密碼

db.properties文件內容:

mysql.driver=com.mysql.jdbc.Driver mysql.url=jdbc:mysql://localhost:3306/erpdb?useUnicode=true&characterEncoding=UTF-8 mysql.uid=YangWanSheng mysql.pwd=Wansheng

 在ssm_dao層建立mybatis.xml文件

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>
    <settings>
        <!--設置是否容許緩存-->
        <setting name="cacheEnabled" value="true"/>
        <!--設置日誌輸出的目標-->
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>
</configuration>

在ssm_dao層中的main下的java建立包

 

在ssm_dao層的main下的resources文件中的mapper建立appMapper.xml文件

appMapper.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="">

</mapper>

在ssm_dao層建立applicationContext.xml文件

applicationContext文件內容以下:下面標註的是須要注意的地方、不要寫錯了包名、文件名

<?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.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">
        <!--讀取db.properties資源文件-->
        <!--驅動類名 -->
        <property name="driverClass" value="${mysql.driver}" />
        <!-- url -->
        <property name="jdbcUrl" value="${mysql.url}" />
        <!-- 用戶名 -->
        <property name="user" value="${mysql.uid}" />
        <!-- 密碼 -->
        <property name="password" value="${mysql.pwd}" />
        <!-- 當鏈接池中的鏈接耗盡的時候c3p0一次同時獲取的鏈接數 -->
        <property name="acquireIncrement" value="5"></property>
        <!-- 初始鏈接池大小 -->
        <property name="initialPoolSize" value="10"></property>
        <!-- 鏈接池中鏈接最小個數 -->
        <property name="minPoolSize" value="5"></property>
        <!-- 鏈接池中鏈接最大個數 -->
        <property name="maxPoolSize" value="20"></property>
    </bean>

    <!--3 會話工廠bean sqlSessionFactoryBean -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean" >
        <!-- 數據源 -->
        <property name="dataSource" ref="datasource"></property>
        <!-- 別名 實體類 掃描ssm_entitys層裏面的實體類,整個包都掃面-->
        <property name="typeAliasesPackage" value="com.yangwansheng.ssm.ssm_entitys"></property>
        <!-- sql映射文件路徑 以前建立的mapper文件夾下的xml文件-->
        <property name="mapperLocations" value="classpath*:mapper/*Mapper.xml"></property>
        <!--mybatis配置文件位置 以前建立的myBatis文件-->
        <property name="configLocation" value="classpath:myBatis.xml"></property>
    </bean>

    <!--4 自動掃描對象關係映射 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!--指定會話工廠,若是當前上下文中只定義了一個則該屬性可省去 -->
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
        <!-- 指定要自動掃描接口的基礎包,實現接口 掃描ssm_dao層下面的接口-->
        <property name="basePackage" value="com.yangwansheng.ssm.ssm_dao"></property>
    </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.yangwansheng.ssm.ssm_dao"></context:component-scan>

    <!--7 aspectj支持自動代理實現AOP功能 -->
    <aop:aspectj-autoproxy proxy-target-class="true"></aop:aspectj-autoproxy>
</beans>

 

 在ssm_dao層的java下的包建立接口類

編寫mapper文件夾下的appMapper.xml文件:下面標註的是命名空間應該對應接口的包名和接口名  標籤的id不能夠重複

<?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.yangwansheng.ssm.ssm_dao.ISupplierDao">
    <!--查詢-->
    <select id="selectSupplier" resultType="supplier"> select * from Supplier </select>
</mapper>

ISupplierDao接口類內容以下:

package com.yangwansheng.ssm.ssm_dao; import com.yangwansheng.ssm.ssm_entitys.Supplier; import java.util.List; public interface ISupplierDao { //這裏的方法名要和appMapper.xml裏面的id一致
    List<Supplier> selectSupplier(); }

測試:在接口類空白處右鍵,選中Go To選項,選上Create new Test

結果:自動生成一個測試類

ISupplierDaoTest測試類內容:下面紅色地方是要寫入的

package com.yangwansheng.ssm.ssm_dao; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; 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.*; @ContextConfiguration(locations = { "classpath:applicationContext.xml"}) @RunWith(SpringJUnit4ClassRunner.class) @Transactional @Rollback(true) public class ISupplierDaoTest {  @Autowired ISupplierDao iSupplierDao; @Before public void setUp() throws Exception { } @After public void tearDown() throws Exception { } @Test public void selectSupplier() { System.out.print(iSupplierDao.selectSupplier()); } }

運行結果:

 開始寫業務邏輯,ssm_servers層

在ssm_servers層的java文件夾裏面建立java包,和建立一個接口類

ISupplierServers接口類的內容
package com.yangwansheng.ssm.ssm_servers; import com.yangwansheng.ssm.ssm_entitys.Supplier; import java.util.List; public interface ISupplierServers { List<Supplier> selectSupplier(); }

 

建立java實體類

ImpSupplierServers實體類的內容:該類繼承ISupplierServers接口類,並實現ISupplierServers接口類的方法
package com.yangwansheng.ssm.imp_servers; import com.yangwansheng.ssm.ssm_dao.ISupplierDao; import com.yangwansheng.ssm.ssm_entitys.Supplier; import com.yangwansheng.ssm.ssm_servers.ISupplierServers; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @Service public class ImpSupplierServers implements ISupplierServers { @Autowired ISupplierDao iSupplierDao; @Override public List<Supplier> selectSupplier() { return iSupplierDao.selectSupplier(); } }

 ssm_ui層的建立的springmvc-service.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.yangwansheng.ssm" />

    <!-- 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/jsp/" />
        <!--自動添加到路徑中的後綴 -->
        <property name="suffix" value=".jsp" />
        <!--設置全部視圖的內容類型,若是視圖自己設置內容類型視圖類能夠忽略 -->
        <property name="contentType" value="text/html;charset=UTF-8" />
        <!-- 優先級,越小越前 -->
        <property name="order" value="2" />
    </bean>

    <!-- FreeMarker視圖解析器與屬性配置 -->
    <bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
        <!--是否啓用緩存 -->
        <property name="cache" value="true" />
        <!--自動添加到路徑中的前綴 -->
        <property name="prefix" value="" />
        <!--自動添加到路徑中的後綴 -->
        <property name="suffix" value=".html" />
        <!--指定視圖渲染類 -->
        <property name="viewClass" value="org.springframework.web.servlet.view.freemarker.FreeMarkerView" />
        <!-- 設置是否暴露Spring的macro輔助類庫,默認爲true -->
        <property name="exposeSpringMacroHelpers" value="true" />
        <!-- 是否應將全部request屬性添加到與模板合併以前的模型。默認爲false。 -->
        <property name="exposeRequestAttributes" value="true" />
        <!-- 是否應將全部session屬性添加到與模板合併以前的模型。默認爲false。 -->
        <property name="exposeSessionAttributes" value="true" />
        <!-- 在頁面中使用${rc.contextPath}就可得到contextPath -->
        <property name="requestContextAttribute" value="rc" />
        <!--設置全部視圖的內容類型,若是視圖自己設置內容類型視圖類能夠忽略 -->
        <property name="contentType" value="text/html;charset=UTF-8" />
        <!-- 優先級,越小越前 -->
        <property name="order" value="1" />
    </bean>
    <!-- 配置FreeMarker細節 -->
    <bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
        <!-- 模板路徑 -->
        <property name="templateLoaderPath" value="/WEB-INF/views/html" />
        <property name="freemarkerSettings">
            <props>
                <!-- 刷新模板的週期,單位爲秒 -->
                <prop key="template_update_delay">5</prop>
                <!--模板的編碼格式 -->
                <prop key="defaultEncoding">UTF-8</prop>
                <!--url編碼格式 -->
                <prop key="url_escaping_charset">UTF-8</prop>
                <!--此屬性能夠防止模板解析空值時的錯誤 -->
                <prop key="classic_compatible">true</prop>
                <!--該模板所使用的國際化語言環境選項-->
                <prop key="locale">zh_CN</prop>
                <!--布爾值格式-->
                <prop key="boolean_format">true,false</prop>
                <!--日期時間格式-->
                <prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop>
                <!--時間格式-->
                <prop key="time_format">HH:mm:ss</prop>
                <!--數字格式-->
                <prop key="number_format">0.######</prop>
                <!--自動開啓/關閉空白移除,默認爲true-->
                <prop key="whitespace_stripping">true</prop>
            </props>
        </property>
    </bean>


    <!--文件上傳解析器 -->
    <!--Spring MVC默認不能識別multipart格式的文件內容 -->
    <bean id="multipartResolver" class="org.springframework.web.multipart.support.StandardServletMultipartResolver">
    </bean>
    <!--跨域-->
    <mvc:cors>
        <mvc:mapping path="/**" allowed-origins="http://localhost:9090" 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>

 ssm_ui層的文件結構以下

編寫webapp文件夾下的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.jsp</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-service.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>

SupplierControl類內容以下:

package com.yangwansheng.ssm.ssm_ui; import com.yangwansheng.ssm.imp_servers.ImpSupplierServers; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller @RequestMapping(value = "index") public class SupplierControl { //打開html頁面
    @RequestMapping(value = "open") public String open(){ return "/Index"; } }

 

配置TomCat

運行TomCat

瀏覽器輸入SupplierControl類下寫的路徑

如今,前端頁面能夠打開、後臺查詢數據庫能夠拿到數據,就開始前端頁面獲取數據

爲了方便,我在ssm_common工具層裏寫了一個工具類R

 

R類內容以下

package com.yangwansheng.ssm.ssm_common; import java.util.HashMap; import java.util.Map; public class R extends HashMap<String, Object> { private static final long serialVersionUID = 1L; //0爲錯誤、1爲正常
    public R() { put("code", 1); put("msg", "success"); } //錯誤時,不帶參數的默認方法
    public static R error() { return error(0, "未知異常,請聯繫管理員"); } //錯誤時,自行寫入參數 msg自定義的錯誤內容
    public static R error(String msg) { return error(0, msg); } //自定義錯誤編碼,錯誤內容,code錯誤編碼,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() { return new R(); } //成功時 msg成功內容
    public static R ok(String msg) { R r = new R(); r.put("msg", msg); return r; } //自定義成功編碼,成功內容,發送數據內容,data要發送的數據 code成功編碼,msg成功內容
    public static R oks(Object data,String msg,int code){ R r = new R(); r.put("data",data); r.put("msg",msg); r.put("code",code); return r; } public static R ok(Map<String, Object> map) { R r = new R(); r.putAll(map); return 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; } }

 

 在ssm_ui層裏面我引入了jQuery,用於ajax請求

 

 index.html文件內容以下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>SSM</title>
    <script src="../../../js/jquery-1.11.3.min.js"></script>
</head>
<body>
    <h1>SSM</h1>
    <table id="table">
        <tr>
            <th>編號</th>
            <th>公司名稱</th>
            <th>公司地址</th>
            <th>公司電話</th>
            <th>公司CEO</th>
        </tr>
    </table>
    <script>
        var app = { init:function () { app.getdata(); }, getdata:function () { $.ajax({ url:"/index/getsupplier",//請求路徑
 type:"get",//請求類型
 beforeSend: function () {//請求前事件
 }, success:function (data) {//請求成功事件
                        if(data.code != 0){//獲取到成功的數據
 $("#table tr:gt(0)").remove();//除了第一行,其餘的都刪除,避免重複渲染
 $.each(data.data, function (i, obj) {//i爲當前集合索引,obj爲當前對象
                                var tr = $("<tr/>").data("supplierNo", obj.supplierNo);//爲每行添加data參數
 $("<td/>").html(obj.supplierNo).appendTo(tr);//把td內容添加到tr後面
 $("<td/>").html(obj.suppierName).appendTo(tr);//把td內容添加到tr後面
 $("<td/>").html(obj.address).appendTo(tr);//把td內容添加到tr後面
 $("<td/>").html(obj.phone).appendTo(tr);//把td內容添加到tr後面
 $("<td/>").html(obj.contact).appendTo(tr);//把td內容添加到tr後面
 $("#table").append(tr);//把tr行添加到table表格裏面
 }) }else{//獲取到失敗的數據
 alert(data.msg); } }, complete: function () {//請求完成後事件,不分紅功失敗
 }, error: function (xhr, textStatus, errorThrown) {//請求失敗事件
 alert(xhr + textStatus + errorThrown); } }) } } app.init(); </script>
</body>
</html>

 

 運行結果:

基本的操做就完成了,最後我附上mySQL的數據表

create table `Supplier` ( `SupplierNo` int unsigned not null AUTO_INCREMENT comment '供應商編號', `SuppierName` varchar(128) not null comment '供應商名稱', `Address` varchar(128) comment '聯繫地址', `Phone` varchar(32) comment '聯繫電話', `Contact` varchar(16) not null comment '聯繫人', PRIMARY KEY (`SupplierNo`) ) select * from Supplier insert into `Supplier`(`SuppierName`, `Address`, `Phone`, `Contact`) values('深圳市億通科技有限公司', '深圳市上海林梅村路4號發汽修大樓7樓', '83373817', '李強') insert into `Supplier`(`SuppierName`, `Address`, `Phone`, `Contact`) select '佛山南海奇美電子有限公司', '佛山南海區南海工業園興北路', '37492520', '黃杉' union 
    select '浙江巨力電機成套設備有限公司', '浙江省台州市三門縣光明中路8號', '69767861', '彭晴' union 
    select '湖南英氏乳業有限公司', '湖南省長沙市人民路188號', '8693999', '羅超' union 
    select '寶鋼集團有限公司', '上海市浦電路370號', '82285687', '戴陽'
相關文章
相關標籤/搜索