IDEA创建Maven项目Spring+SpringMVC+MyBatis(SSM)框架集成

一、SSM

  简介:Spring+SpringMVC+MyBatis有一个简称SSM,Spring实现业务对象管理,Spring MVC负责请求的转发和视图管理, MyBatis作为数据对象持久化引擎。

     这样搭配的优点是:轻量、自由度高、Spring与Spring MVC契合度更好。通过一个商品管理示例完成SSM框架的集成,可以将前面学习过的一些内容整合起来。

 SpringMVC

  1.客户端发送请求到DispacherServlet(分发器)

  2.由DispacherServlet控制器查询HanderMapping,找到处理请求的Controller

  3.Controller调用业务逻辑处理后,返回ModelAndView

  4.DispacherSerclet查询视图解析器,找到ModelAndView指定的视图

  5.视图负责将结果显示到客户端

  

  

 Spring

  1.Spring是一个轻量级的控制反转(IOC)和面向切面(AOP)的容器架构,IOC容器包含并管理应用对象的配置和生命周期,

   你可以配置你的每个bean如何被创建,也可以配置每个bean是只有一个实例,还是每次需要时都生成一个新的实例,以及它们是如何相互关联的。

  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多模块

  1、Java项目管理工具,主要功能是统一开发规范与包的依赖管理。便于后期的维护,一般会进行分层开发,分层之后,各个层之间的职责会比较明确,

       后期维护起来也相对比较容易(POM(Project Object Model)项目对象模型)

二、创建项目

1、直接创建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', '戴阳'  

猜你喜欢

转载自www.cnblogs.com/yangWanSheng/p/10537739.html