首页 > 编程语言 > 详细

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

时间:2019-03-27 22:14:36      阅读:283      评论:0      收藏:0      [点我收藏+]

一、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, 戴阳  

 

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

原文:https://www.cnblogs.com/yangWanSheng/p/10537739.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!