zoukankan      html  css  js  c++  java
  • SSM框架的整合

    1.1 Maven整合SSM框架简介

    1.1.1 SSM框架整合概述

    • 利用Maven整合SSM框架的思路

      1.在对每个框架整合之前都需要先在Maven的pom.xml配置文件中导入相关的依赖

      2.导入完依赖接着再在pom.xml配置文件中导入相关插件

      3.整合各个框架对应的配置文件,把与创建对象相关交给Spring即整合到spring.xml中

      4.重新整个各个框架的核心配置文件

    • 注意点:

      1.每整合完一个框架都要做相应的测试,防止一次性整合完,出现错误难以排查

      2.本文以创建一个web项目为例

      3.本文用的是eclipse的neon版本工具进行整合

      4.配置文件放在src/main/resources目录下

    1.2 Maven整合SSM框架整合详解

    1.2.1 在eclipse中创建一个工程

    • 创建工程详解

      1.创建一个Maven工程,选择骨架webapp,填写好坐标三要素

      

        

      2.因为webapp骨架缺少src/main/java文件结构,所以需要添加该文件结构

      3.如果创建的是普通java骨架,其会缺少src/main/resource文件结构

      4.创建完了,项目目录结构如下:

      

      5.在maven的pom.xml中添加所需的插件,如source生成插件,编译插件,Tomcat插件

     1 <project xmlns="http://maven.apache.org/POM/4.0.0" 
     2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
     4   <modelVersion>4.0.0</modelVersion>
     5   <groupId>cn.baidu</groupId>
     6   <artifactId>UER-ORDER-SSM</artifactId>
     7   <packaging>war</packaging>
     8   <version>0.0.1-SNAPSHOT</version>
     9   <name>UER-ORDER-SSM Maven Webapp</name>
    10   <url>http://maven.apache.org</url>
    11   <dependencies>
    12     <dependency>
    13       <groupId>junit</groupId>
    14       <artifactId>junit</artifactId>
    15       <version>3.8.1</version>
    16       <scope>test</scope>
    17     </dependency>
    18   </dependencies>
    19   <build>
    20     <finalName>UER-ORDER-SSM</finalName>
    21     <!-- source插件 -->
    22     <plugins>
    23         <plugin>
    24             <groupId>org.apache.maven.plugins</groupId>
    25             <artifactId>maven-compiler-plugin</artifactId>
    26             <configuration>
    27                 <source>1.8</source>
    28                 <target>1.8</target>
    29                 <encoding>UTF-8</encoding>
    30             </configuration>
    31         </plugin>
    32         <!-- Tomcat插件整合SpringMVC的时候补充 -->
    33     </plugins>
    34   </build>
    35 </project>

      6.注意:

      • maven插件资源,将当前maven工程进行compile编译时加载,完成java1.8,1.7的使用,这里统一使用1.8的版本
      • 往下整合关于pom.xml文件的配置内容,本人只给出需要添加的部分,读者往上面代码中添加即可

    1.2.2 将Spring框架整合到Maven中

    • 整体思路

      1.先在pom.xml文件中导入Spring框架所依赖的资源

      2.然后编写spring的核心配置文件,spring.xml,该配置文件进行包扫描,打开注解配置

      3.往下的整合只要跟创建对象,对象管理相关的配置都在spring.xml文件中配置

      4.编写测试代码,测试整合是否成功

    • 先在Pom.xml文件中导入Spring框架的依赖资源

      1.导入spring-context依赖资源,但是依赖具有传递性,导入该资源可能也会引入其他依赖资源 

    1 <dependency>
    2    <groupId>org.springframework</groupId>
    3    <artifactId>spring-context</artifactId>
    4    <version>4.3.7.RELEASE</version>
    5 </dependency>
    • 编写Spring的核心配置文件spring.xml

      1.将spring.xml配置文件放到src/main/resources目录下

      2.在src目录下的资源在编译的时候都会将字节码加载到target/classes中

      3.在配置文件中会经常看见"classpath:xxx.xml"路径来读取文件,而classpath路径是什么位置?

      4.在maven项目中classpath路径默认src/main/resource路径

      5.往后跟创建对象相关的配置需要放在spring的核心配置文件中,用于创建bean对象

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     4     xmlns:aop="http://www.springframework.org/schema/aop"
     5     xmlns:tx="http://www.springframework.org/schema/tx"
     6     xmlns:p="http://www.springframework.org/schema/p"
     7     xmlns:util="http://www.springframework.org/schema/util" 
     8     xmlns:context="http://www.springframework.org/schema/context"
     9     xmlns:mvc="http://www.springframework.org/schema/mvc"
    10     xsi:schemaLocation="
    11         http://www.springframework.org/schema/beans
    12         http://www.springframework.org/schema/beans/spring-beans.xsd
    13         http://www.springframework.org/schema/aop 
    14         http://www.springframework.org/schema/aop/spring-aop.xsd
    15         http://www.springframework.org/schema/tx 
    16         http://www.springframework.org/schema/tx/spring-tx.xsd
    17         http://www.springframework.org/schema/util 
    18         http://www.springframework.org/schema/util/spring-util.xsd
    19         http://www.springframework.org/schema/context
    20         http://www.springframework.org/schema/context/spring-context.xsd
    21         http://www.springframework.org/schema/mvc
    22         http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    23         
    24         <!-- 开启包扫描 -->
    25         <context:component-scan base-package="cn.baidu"></context:component-scan>
    26         <!-- 开启注解DI -->
    27         <context:annotation-config></context:annotation-config>
    28     
    29  </beans>
    • 编写测试代码,测试maven整合spring框架是否成功

      1.依据三层架构建好目录结构

      

      2.编写控制层测试程序

     1 package cn.baidu.controller;
     2 
     3 import org.springframework.beans.factory.annotation.Autowired;
     4 import org.springframework.stereotype.Controller;
     5 
     6 import cn.baidu.service.HelloService;
     7 
     8 @Controller
     9 public class HelloController {
    10     
    11 //    注入service层对象
    12     @Autowired
    13     private HelloService helloService;
    14     
    15     public String sayHi(String name){
    16 //        调用对应service层的方法
    17         return helloService.sayHi(name);
    18     }
    19 
    20 }

      3.编写业务逻辑层的接口

    1 package cn.baidu.service;
    2 
    3 //service层的接口
    4 public interface HelloService {
    5 
    6     public String sayHi(String name);
    7 
    8 }

      4.编写业务层的实现类

     1 package cn.baidu.service;
     2 
     3 import org.springframework.beans.factory.annotation.Autowired;
     4 import org.springframework.stereotype.Service;
     5 
     6 import cn.baidu.mapper.HelloMapper;
     7 
     8 @Service
     9 public class HelloServiceImp implements HelloService{
    10     
    11 //    注入持久层对象
    12     @Autowired
    13     private HelloMapper helloMapper;
    14     @Override
    15     public String sayHi(String name) {
    16 //        调用持久层方法
    17         return helloMapper.sayHi(name);
    18     }
    19 
    20 }

      5.编写持久层接口

    1 package cn.baidu.mapper;
    2 
    3 public interface HelloMapper {
    4 
    5     public String sayHi(String name);
    6 
    7 }

      6.编写持久层实现类

     1 package cn.baidu.mapper;
     2 
     3 import org.springframework.stereotype.Repository;
     4 
     5 @Repository
     6 public class HelloMapperImp implements HelloMapper{
     7 
     8     @Override
     9     public String sayHi(String name) {
    10         return "Hi,欢迎测试Spring框架的搭建情况";
    11     }
    12     
    13 }

      7.编写测试类,测试整合情况

     1 package cn.baidu.test;
     2 
     3 import org.junit.Test;
     4 import org.springframework.context.ApplicationContext;
     5 import org.springframework.context.support.ClassPathXmlApplicationContext;
     6 
     7 import cn.baidu.controller.HelloController;
     8 
     9 public class TestHello {
    10     
    11     @Test
    12     public void test(){
    13         
    14 //        初始化Spring容器
    15         ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
    16 //        获取控制层对象
    17         HelloController helloController = context.getBean(HelloController.class);
    18 //        调用控制层方法
    19         String str = helloController.sayHi("谭小杰");
    20         System.out.println(str);
    21         
    22     }
    23 
    24 }

      7.出现如下结果说明测试成功

      

    1.2.3 将Mybatis框架整合至Maven中

    • 整合思路

      1.Mybatis框架主要有两个配置文件,一个是mybatis配置文件和xxxMapper.xml(核心)配置文件

      2.映射配置文件中主要配置数据源,用于创建与数据库连接的对象和配置核心配置文件的映射

      3.有以上两个文件的配置内容可知,数据源的配置移到spring.xml配置文件中

      4.MyBatis框架需要创建sqlSession对象执行sql语句,获取执行结果

      5.所以在spring.xml文件中配置sqlSession的bean,用于创建Session对象

      6.MyBatis需要mapper接口,需要在spring.xml配置对应的bean利用动态代理创建其接口的实现类

      7.编写mybatis-config.xml配置文件,里面添加一些mybatis的功能

      8.编写xxxMapper.xml配置文件,定义好namespace和定义所需的sql语句

    • 在pom.xml配置文件中导入Mybatis框架所需的依赖资源

      1.配置数据源需要连接池依赖,jdbc依赖和数据库类型依赖

      2.本文用的连接池是阿里巴巴的druid,数据库用的是MySQL

     1 <!-- 连接池依赖 -->
     2 <dependency>
     3     <groupId>com.alibaba</groupId>
     4     <artifactId>druid</artifactId>
     5     <version>1.0.14</version>
     6 </dependency>
     7 <!-- jdbc依赖 -->
     8 <dependency>
     9     <groupId>org.springframework</groupId>
    10     <artifactId>spring-jdbc</artifactId>
    11     <version>4.3.7.RELEASE</version>
    12 </dependency>
    13 <!-- mysql依赖 -->
    14 <dependency>
    15     <groupId>mysql</groupId>
    16     <artifactId>mysql-connector-java</artifactId>
    17     <version>5.0.8</version>
    18 </dependency>
    19 <!-- mybatis依赖资源 -->
    20 <dependency>
    21     <groupId>org.mybatis</groupId>
    22     <artifactId>mybatis</artifactId>
    23     <version>3.4.5</version>
    24 </dependency>
    25 <!-- mybatis-spring依赖资源 -->
    26 <dependency>
    27     <groupId>org.mybatis</groupId>
    28     <artifactId>mybatis-spring</artifactId>
    29     <version>1.3.1</version>
    30 </dependency>
    • 在spring.xml中配置对应的bean

      1.配置数据源的bean标签,该标签主要数用于创建连接数据库对象

    1 <!-- 配置数据源 -->
    2 <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
    3     <!-- 4个属性,数据库驱动,URL,用户名和密码 -->
    4       <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    5        <property name="url" value="jdbc:mysql:///mssm"/>
    6        <property name="username" value="root"/>
    7        <property name="password" value="root"/>
    8 </bean>

      2.配置sqlSession的bean标签,该标签用于创建session对象,用于执行sql语句和获取执行结果

     1 <!-- 配置sqlSession,动态代理实现持久层sqlSession接口实现的对象 -->
     2 <bean id="sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean">
     3     <!-- 绑定数据源即获取connection对象 -->
     4     <property name="dataSource" ref="dataSource"/>
     5     <!-- 加载mybatis的独立配置文件 -->
     6     <property name="configLocation" value="classpath:mybatis-config.xml"/>
     7     <!-- 扫描映射xxxMapper.xml映射文件 -->
     8     <property name="mapperLocations"value="classpath:mapper/*.xml"/>
     9 </bean>
    10 <!-- 配置mapper接口的扫描配置用于创建mapper接口的实现类 -->
    11 <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    12      <property name="basePackage" value="cn.baidu.mapper"/>
    13 </bean>
    • 编写mybatis-config.xml配置文件

      1.在src/main/resources目录下编写mybatis-config.xml配置文件

     1 <?xml version="1.0" encoding="UTF-8" ?>
     2 <!DOCTYPE configuration
     3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
     4 "http://mybatis.org/dtd/mybatis-3-config.dtd">
     5 <configuration>
     6     <!-- 打开驼峰命名设置,用于封装持久层数据对象的内容-->
     7     <settings>
     8         <setting name="mapUnderscoreToCamelCase" value="true"/>
     9     </settings>
    10     
    11 </configuration>
    • 编写xxxMapper.xml配置文件

      1.在src/main/resources/mapper目录下配置对应的xxxMapper.xml文件,将sql语句添加其中

    1 <?xml version="1.0" encoding="UTF-8"?>
    2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    3 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    4 <mapper namespace="cn.baidu.mapper.StudentMapper">
    5 </mapper> 
    • 编写测试代码,测试Mybatis整合是否成功

      1.在连接的数据库中建立mssm数据库,创建student表格,其有如下字段和数据

    1 //创建表
    2 create table student(id varchar(225),name varchar(225));
    3 //添加数据
    4 insert into student values('a','王重阳'),('b','欧阳锋'),('c','黄药师');

      2.编写一个用于封装数据的domain类

     1 package cn.baidu.domain;
     2 
     3 public class Student {
     4     
     5 //    定义属性
     6     private String id;
     7     private String name;
     8 //    定义构造方法
     9     public Student(){}
    10     public Student(String id, String name) {
    11         super();
    12         this.id = id;
    13         this.name = name;
    14     }
    15 //    定义getter和sett方法
    16     public String getId() {
    17         return id;
    18     }
    19     public void setId(String id) {
    20         this.id = id;
    21     }
    22     public String getName() {
    23         return name;
    24     }
    25     public void setName(String name) {
    26         this.name = name;
    27     }
    28     @Override
    29     public String toString() {
    30         return "Student [id=" + id + ", name=" + name + "]";
    31     }
    32     
    33 }

      3.编写控制层代码

     1 package cn.baidu.controller;
     2 
     3 import org.springframework.beans.factory.annotation.Autowired;
     4 import org.springframework.stereotype.Controller;
     5 
     6 import cn.baidu.domain.Student;
     7 import cn.baidu.service.StudentService;
     8 
     9 @Controller
    10 public class StudentController {
    11     
    12     @Autowired
    13     private StudentService studentService;
    14     public Student queryStudentById(String id){
    15         return studentService.queryStudentById(id);
    16     }
    17 
    18 }

      4.编写业务层接口

    1 package cn.baidu.service;
    2 
    3 import cn.baidu.domain.Student;
    4 
    5 public interface StudentMapper {
    6     
    7     public Student queryOne(String id);
    8 }

      5.编写业务层的实现类

     1 package cn.baidu.service;
     2 
     3 import org.springframework.beans.factory.annotation.Autowired;
     4 import org.springframework.stereotype.Service;
     5 
     6 import cn.baidu.domain.Student;
     7 
     8 @Service
     9 public class StudentServiceImp implements StudentService{
    10     
    11     @Autowired
    12     private StudentMapper studentMapper;
    13 
    14     @Override
    15     public Student queryStudentById(String id) {
    16         return studentMapper.queryOne(id);
    17     }
    18 
    19 }

      6.编写studentMapper.xml文件,把写入查询sql语句

    1 <?xml version="1.0" encoding="UTF-8"?>
    2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    3 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    4 <mapper namespace="cn.baidu.mapper.StudentMapper">
    5     <select id="queryOne" resultType="cn.baidu.domain.Student">
    6         select * from student where id=#{id};
    7     </select>
    8 </mapper> 

      7.编写对应的Mapper配置文件对应的接口

    1 package cn.baidu.mapper;
    2 
    3 import cn.baidu.domain.Student;
    4 
    5 public interface StudentMapper {
    6     
    7     public Student queryOne(String id);
    8 }

      8.编写测试类,测试是否整合成功

     1 package cn.baidu.test;
     2 
     3 import org.junit.Test;
     4 import org.springframework.context.ApplicationContext;
     5 import org.springframework.context.support.ClassPathXmlApplicationContext;
     6 
     7 import cn.baidu.controller.StudentController;
     8 import cn.baidu.domain.Student;
     9 
    10 public class StudentTest {
    11     
    12     @Test
    13     public void test(){
    14         
    15 //        初始化Spring容器
    16         ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
    17 //        获取控制层对象
    18         StudentController studentController = context.getBean(StudentController.class);
    19 //        调用控制层方法
    20         Student student = studentController.queryStudentById("c");
    21         System.out.println(student);
    22         
    23     }
    24 
    25 
    26 }

       9.出现如下结果,说明Mybatis整合成功

       

    1.2.4 将SpringMVC框架整合到Maven中

    • 整体思路

      1.在pom.xml文件中导入SpringMVC框架所需要的依赖资源和插件

      2.在web.xml文件中创建前端控制器即dispatcherServlet

      3.编写springmvc的核心配置文件spring-mvc.xml,用于配置视图解析器和打开mvc注解

      4.如有一些静态资源的访问,也可在spring-mvc.xml文件中配置

    • 在pom.xml配置文件中导入Tomcat插件

      1.对于web项目,所有的内容都是由Tomcat容器启动的,所以需要引入Tomcat插件

     1 <!-- 引入Tomcat插件 -->
     2 <plugin>
     3         <groupId>org.apache.tomcat.maven</groupId>
     4         <artifactId>tomcat7-maven-plugin</artifactId>
     5         <version>2.2</version>
     6         <!-- Tomcat的启动配置 -->
     7         <configuration>
     8             <!-- 端口号访问路径默认80端口 -->
     9             <port>80</port>
    10             <!-- 应用程序的访问路径 -->
    11             <path>/</path>
    12             <!-- 接收数据编解码的格式为utf-8 -->
    13             <uriEncoding>utf-8</uriEncoding>
    14             <useBodyEncodingForURI>utf-8</useBodyEncodingForURI>
    15         </configuration>
    16 </plugin>

      注:如果不想引入Tomcat插件,将项目打成war包扔至外部Tomcat也可以,这里选择导入插件

    • 导入SpringMVC所需要的依赖

      1.SpringMVC需要导入spring-web和spring-webmvc依赖

      2.有时为了将对象转化成json字符串,还需要Jackson依赖

     1 <!-- 引入spring-web依赖 -->
     2 <dependency>
     3     <groupId>org.springframework</groupId>
     4     <artifactId>spring-web</artifactId>
     5     <version>4.3.7.RELEASE</version>
     6 </dependency>
     7 <!-- 引入spring-webMVC依赖 -->
     8 <dependency>
     9     <groupId>org.springframework</groupId>
    10     <artifactId>spring-webmvc</artifactId>
    11     <version>4.3.7.RELEASE</version>
    12 </dependency>
    13 <!-- 引入Jackson依赖 -->
    14 <dependency>
    15     <groupId>com.fasterxml.jackson.core</groupId>
    16     <artifactId>jackson-core</artifactId>
    17     <version>2.8.8</version>
    18 </dependency>
    19 <dependency>
    20     <groupId>com.fasterxml.jackson.core</groupId>
    21     <artifactId>jackson-databind</artifactId>
    22     <version>2.8.8</version>
    23 </dependency>
    • 在Tomcat启动加载的web.xml文件中,配置dispacherservlet

      1.在dispacherservlet的配置中初始化spring*.xml文件,使得服务器加载spring的所有配置内容

      2.让服务器加载所有配置内容的目的是使得各层的注解生效,web.xml配置如下

     1 <!DOCTYPE web-app PUBLIC
     2  "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
     3  "http://java.sun.com/dtd/web-app_2_3.dtd" >
     4 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     5          xmlns="http://java.sun.com/xml/ns/javaee" 
     6          xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
     7          xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
     8   <display-name>Archetype Created Web Application</display-name>
     9     <!-- 创建dispachersevlet -->
    10     <servlet>
    11         <servlet-name>springmvc</servlet-name>
    12         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    13         <!-- 配置初始化参数,使得Tomcat启动的时候,加载spring*.xml文件 -->
    14         <init-param>
    15             <param-name>contextConfigLocation</param-name>
    16             <param-value>classpath:spring*.xml</param-value>
    17         </init-param>
    18     </servlet>
    19     <servlet-mapping>
    20         <servlet-name>springmvc</servlet-name>
    21         <url-pattern>/*</url-pattern>
    22     </servlet-mapping>
    23   <welcome-file-list>index.html</welcome-file-list>
    24 </web-app>
    • 在src/main/resources目录下编写spring-mvc.xml文件

      1.文件中开启mvc注解生效配置和视图解析器的配置

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     4     xmlns:aop="http://www.springframework.org/schema/aop"
     5     xmlns:tx="http://www.springframework.org/schema/tx"
     6     xmlns:p="http://www.springframework.org/schema/p"
     7     xmlns:util="http://www.springframework.org/schema/util" 
     8     xmlns:context="http://www.springframework.org/schema/context"
     9     xmlns:mvc="http://www.springframework.org/schema/mvc"
    10     xsi:schemaLocation="
    11         http://www.springframework.org/schema/beans
    12         http://www.springframework.org/schema/beans/spring-beans.xsd
    13         http://www.springframework.org/schema/aop 
    14         http://www.springframework.org/schema/aop/spring-aop.xsd
    15         http://www.springframework.org/schema/tx 
    16         http://www.springframework.org/schema/tx/spring-tx.xsd
    17         http://www.springframework.org/schema/util 
    18         http://www.springframework.org/schema/util/spring-util.xsd
    19         http://www.springframework.org/schema/context
    20         http://www.springframework.org/schema/context/spring-context.xsd
    21         http://www.springframework.org/schema/mvc
    22         http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    23     <!-- 静态资源html js css访问  -->
    24     <mvc:resources location="/" mapping="/**"/>
    25     <!-- springmvc开启所有注解功能的标签 -->
    26 
    27     <mvc:annotation-driven/>
    28     
    29     <!-- 视图解析的前后缀 -->
    30     <bean id="viewResovler" 
    31     class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    32     <!-- 前后缀拼接 -->
    33     <property name="prefix" value="views/"/>
    34     <property name="suffix" value=".html"></property>
    35     </bean>
    36     <!-- 以下配置可以解决springmvc返回数据的编解码问题 -->
    37     <bean class="org.springframework.http.converter.StringHttpMessageConverter">
    38         <property name="supportMediaTypes" value="text/html;charset=utf-8"></property>
    39     </bean>
    40 </beans>
    • 编写测试代码,测试SpringMvc整合是否成功

      1.测试代码实现的功能需求:通过浏览器,传递一个get的请求参数id=a/b/c

      2.项目返回一个从数据库查询的student对象,页面的浏览器展示

      3.在整合mybatis测试代码的基础上,编写该测试代码,把之前的test类删除

      4.修改控制层的代码,如下,其他的与mybatis测试代码一致,不再展示

     1 package cn.baidu.controller;
     2 
     3 import org.springframework.beans.factory.annotation.Autowired;
     4 import org.springframework.stereotype.Controller;
     5 import org.springframework.web.bind.annotation.RequestMapping;
     6 import org.springframework.web.bind.annotation.ResponseBody;
     7 
     8 import cn.baidu.domain.Student;
     9 import cn.baidu.service.StudentService;
    10 
    11 
    12 @Controller
    13 public class StudentController {
    14     
    15     @Autowired
    16     private StudentService studentService;
    17     
    18 //    以下两个注解,他们的作用分别是:将以下的方法变成处理器
    19 //    RequestBody是实现将返回的对象变成json字符串,展示在浏览器端
    20     @RequestMapping("queryStudent")
    21     @ResponseBody
    22     public Student queryStudentById(String id){
    23         return studentService.queryStudentById(id);
    24     }
    25 
    26 }

      5.启动当前工程,运行Tomcat插件,在maven build中创建一个运行命令:goals:tomcat7:run

      

      

      6.运行debuge/run的maven build的命令,启动Tomcat出现如下信息说明启动成功

      

      7.在浏览器测试访问localhost/queryStudent?id=a,出现如下的结果说明整合成功

      

      8.完成了以上内容说明maven整合的SSM框架已将全部整合完毕

    1.3 SSM框架整合总结

    1.3.1 SSM框架整合整体配置文件和目录结构展示

    • 目录结构如下:

      1.磁盘中的目录结构如下

      

      2.eclipse中的目录结构如下

      

    • 整体配置文件

      1.pom.xml整体配置文件

      1 <project xmlns="http://maven.apache.org/POM/4.0.0" 
      2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
      4   <modelVersion>4.0.0</modelVersion>
      5   <groupId>cn.baidu</groupId>
      6   <artifactId>UER-ORDER-SSM</artifactId>
      7   <packaging>war</packaging>
      8   <version>0.0.1-SNAPSHOT</version>
      9   <name>UER-ORDER-SSM Maven Webapp</name>
     10   <url>http://maven.apache.org</url>
     11   <dependencies>
     12     <dependency>
     13       <groupId>junit</groupId>
     14       <artifactId>junit</artifactId>
     15       <version>3.8.1</version>
     16       <scope>test</scope>
     17     </dependency>
     18     <dependency>
     19         <groupId>org.springframework</groupId>
     20         <artifactId>spring-context</artifactId>
     21         <version>4.3.7.RELEASE</version>
     22     </dependency>
     23     <!-- 连接池依赖 -->
     24     <dependency>
     25         <groupId>com.alibaba</groupId>
     26         <artifactId>druid</artifactId>
     27         <version>1.0.14</version>
     28     </dependency>
     29     <!-- jdbc依赖 -->
     30     <dependency>
     31         <groupId>org.springframework</groupId>
     32         <artifactId>spring-jdbc</artifactId>
     33         <version>4.3.7.RELEASE</version>
     34     </dependency>
     35     <!-- mysql依赖 -->
     36     <dependency>
     37         <groupId>mysql</groupId>
     38         <artifactId>mysql-connector-java</artifactId>
     39         <version>5.0.8</version>
     40     </dependency>
     41     <!-- mybatis依赖资源 -->
     42     <dependency>
     43         <groupId>org.mybatis</groupId>
     44         <artifactId>mybatis</artifactId>
     45         <version>3.4.5</version>
     46     </dependency>
     47     <!-- mybatis-spring依赖资源 -->
     48     <dependency>
     49         <groupId>org.mybatis</groupId>
     50         <artifactId>mybatis-spring</artifactId>
     51         <version>1.3.1</version>
     52     </dependency>
     53     <!-- 引入spring-web依赖 -->
     54     <dependency>
     55         <groupId>org.springframework</groupId>
     56         <artifactId>spring-web</artifactId>
     57         <version>4.3.7.RELEASE</version>
     58     </dependency>
     59     <!-- 引入spring-webMVC依赖 -->
     60     <dependency>
     61         <groupId>org.springframework</groupId>
     62         <artifactId>spring-webmvc</artifactId>
     63         <version>4.3.7.RELEASE</version>
     64     </dependency>
     65     <!-- 引入Jackson依赖 -->
     66     <dependency>
     67         <groupId>com.fasterxml.jackson.core</groupId>
     68         <artifactId>jackson-core</artifactId>
     69         <version>2.8.8</version>
     70     </dependency>
     71     <dependency>
     72         <groupId>com.fasterxml.jackson.core</groupId>
     73         <artifactId>jackson-databind</artifactId>
     74         <version>2.8.8</version>
     75     </dependency>
     76   </dependencies>
     77   <build>
     78     <finalName>UER-ORDER-SSM</finalName>
     79     <!-- source插件 -->
     80     <plugins>
     81         <plugin>
     82             <groupId>org.apache.maven.plugins</groupId>
     83             <artifactId>maven-compiler-plugin</artifactId>
     84             <configuration>
     85                 <source>1.8</source>
     86                 <target>1.8</target>
     87                 <encoding>UTF-8</encoding>
     88             </configuration>
     89         </plugin>
     90         <!-- 引入Tomcat插件 -->
     91         <plugin>
     92             <groupId>org.apache.tomcat.maven</groupId>
     93             <artifactId>tomcat7-maven-plugin</artifactId>
     94             <version>2.2</version>
     95             <!-- Tomcat的启动配置 -->
     96             <configuration>
     97                 <!-- 端口号访问路径默认80端口 -->
     98                 <port>80</port>
     99                 <!-- 应用程序的访问路径 -->
    100                 <path>/</path>
    101                 <!-- 接收数据编解码的格式为utf-8 -->
    102                 <uriEncoding>utf-8</uriEncoding>
    103                 <useBodyEncodingForURI>utf-8</useBodyEncodingForURI>
    104             </configuration>
    105         </plugin>
    106     </plugins>
    107   </build>
    108 </project>
    View Code

      2.web.xml整体配置文件

     1 <!DOCTYPE web-app PUBLIC
     2  "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
     3  "http://java.sun.com/dtd/web-app_2_3.dtd" >
     4 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     5          xmlns="http://java.sun.com/xml/ns/javaee" 
     6          xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
     7          xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
     8   <display-name>Archetype Created Web Application</display-name>
     9     <!-- 创建dispachersevlet -->
    10     <servlet>
    11         <servlet-name>springmvc</servlet-name>
    12         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    13         <!-- 配置初始化参数,使得Tomcat启动的时候,加载spring*.xml文件 -->
    14         <init-param>
    15             <param-name>contextConfigLocation</param-name>
    16             <param-value>classpath:spring*.xml</param-value>
    17         </init-param>
    18     </servlet>
    19     <servlet-mapping>
    20         <servlet-name>springmvc</servlet-name>
    21         <url-pattern>/*</url-pattern>
    22     </servlet-mapping>
    23   <welcome-file-list>index.html</welcome-file-list>
    24 </web-app>
    View Code

      3.spring.xml整体配置文件

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     4     xmlns:aop="http://www.springframework.org/schema/aop"
     5     xmlns:tx="http://www.springframework.org/schema/tx"
     6     xmlns:p="http://www.springframework.org/schema/p"
     7     xmlns:util="http://www.springframework.org/schema/util" 
     8     xmlns:context="http://www.springframework.org/schema/context"
     9     xmlns:mvc="http://www.springframework.org/schema/mvc"
    10     xsi:schemaLocation="
    11         http://www.springframework.org/schema/beans
    12         http://www.springframework.org/schema/beans/spring-beans.xsd
    13         http://www.springframework.org/schema/aop 
    14         http://www.springframework.org/schema/aop/spring-aop.xsd
    15         http://www.springframework.org/schema/tx 
    16         http://www.springframework.org/schema/tx/spring-tx.xsd
    17         http://www.springframework.org/schema/util 
    18         http://www.springframework.org/schema/util/spring-util.xsd
    19         http://www.springframework.org/schema/context
    20         http://www.springframework.org/schema/context/spring-context.xsd
    21         http://www.springframework.org/schema/mvc
    22         http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    23         
    24         <!-- 开启包扫描 -->
    25         <context:component-scan base-package="cn.baidu"></context:component-scan>
    26         <!-- 开启注解DI -->
    27         <context:annotation-config></context:annotation-config>
    28         <!-- 配置数据源 -->
    29         <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
    30             <!-- 4个属性,数据库驱动,URL,用户名和密码 -->
    31             <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    32             <property name="url" value="jdbc:mysql:///mssm"/>
    33             <property name="username" value="root"/>
    34             <property name="password" value="041X"/>
    35         </bean>
    36         <!-- 配置sqlSession,动态代理实现持久层sqlSession接口实现的对象 -->
    37         <bean id="sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean">
    38             <!-- 绑定数据源即获取connection对象 -->
    39             <property name="dataSource" ref="dataSource"/>
    40             <!-- 加载mybatis的独立配置文件 -->
    41             <property name="configLocation" value="classpath:mybatis-config.xml"/>
    42             <!-- 扫描映射xxxMapper.xml映射文件 -->
    43             <property name="mapperLocations" value="classpath:mapper/*.xml"/>
    44         </bean>
    45         <!-- 配置mapper接口的扫描配置用于创建mapper接口的实现类 -->
    46         <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    47             <property name="basePackage" value="cn.baidu.mapper"/>
    48         </bean>
    49     
    50  </beans>
    View Code

      4.mybatis-config.xml整体配置文件

     1 <?xml version="1.0" encoding="UTF-8" ?>
     2 <!DOCTYPE configuration
     3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
     4 "http://mybatis.org/dtd/mybatis-3-config.dtd">
     5 <configuration>
     6     <!-- 打开驼峰命名设置,用于封装持久层数据对象的内容-->
     7     <settings>
     8         <setting name="mapUnderscoreToCamelCase" value="true"/>
     9     </settings>
    10     
    11 </configuration>
    View Code

      5.spring-mvc.xml整体配置文件

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     4     xmlns:aop="http://www.springframework.org/schema/aop"
     5     xmlns:tx="http://www.springframework.org/schema/tx"
     6     xmlns:p="http://www.springframework.org/schema/p"
     7     xmlns:util="http://www.springframework.org/schema/util" 
     8     xmlns:context="http://www.springframework.org/schema/context"
     9     xmlns:mvc="http://www.springframework.org/schema/mvc"
    10     xsi:schemaLocation="
    11         http://www.springframework.org/schema/beans
    12         http://www.springframework.org/schema/beans/spring-beans.xsd
    13         http://www.springframework.org/schema/aop 
    14         http://www.springframework.org/schema/aop/spring-aop.xsd
    15         http://www.springframework.org/schema/tx 
    16         http://www.springframework.org/schema/tx/spring-tx.xsd
    17         http://www.springframework.org/schema/util 
    18         http://www.springframework.org/schema/util/spring-util.xsd
    19         http://www.springframework.org/schema/context
    20         http://www.springframework.org/schema/context/spring-context.xsd
    21         http://www.springframework.org/schema/mvc
    22         http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    23     <!-- 静态资源html js css访问  -->
    24     <mvc:resources location="/" mapping="/**"/>
    25     <!-- springmvc开启所有注解功能的标签 -->
    26 
    27     <mvc:annotation-driven/>
    28     
    29     <!-- 视图解析的前后缀 -->
    30     <bean id="viewResovler" 
    31     class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    32     <!-- 前后缀拼接 -->
    33     <property name="prefix" value="views/"/>
    34     <property name="suffix" value=".html"></property>
    35     </bean>
    36     <!-- 以下配置可以解决springmvc返回数据的编解码问题 -->
    37     <bean class="org.springframework.http.converter.StringHttpMessageConverter">
    38         <property name="supportMediaTypes" value="text/html;charset=utf-8"></property>
    39     </bean>
    40 </beans>
    View Code

      6.xxxMapper.xml整体配置文件,此配置文件多变,以下只是范例

    1 <?xml version="1.0" encoding="UTF-8"?>
    2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    3 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    4 <mapper namespace="cn.baidu.mapper.StudentMapper">
    5     <select id="queryOne" resultType="cn.baidu.domain.Student">
    6         select * from student where id=#{id};
    7     </select>
    8 </mapper> 
    View Code

    1.3.2 SSM整合易错点

    • 错误调试思路

      1.在做整合的时候不免出现各种各样的错误,大多都是不细心造成的

      2.所以在遇见错误的时候,保持耐心,慢慢捋一捋思路

      3.以下是本人调试错误的一些思路,仅供参考

      • SSM框架整合出现异常,一般都是由前一个异常引起后面异常的抛出,所以查看异常的时候,查看报错的第一句(第一句内容比较长)
      • 例如报如下错误:出现异常按照以下红色字体标识往下找,通常找到最后一行即可找到出错导致的原因,或者某些关键字,按照其提示的关键字,自己到对应的地方仔细检查,排查错误
      • org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'studentController': Unsatisfied dependency expressed through field 'studentService'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'studentServiceImp': Unsatisfied dependency expressed through field 'studentMapper'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'studentMapper' defined in file [E:workspace_v1ORDER-USER-SSM argetclassescnaidumapperStudentMapper.class]: Unsatisfied dependency expressed through bean property 'sqlSessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSession' defined in class path resource [applicationContext.xml]: Invocation of init method failed; nested exception is org.springframework.core.NestedIOException: Failed to parse mapping resource: 'file [E:workspace_v1ORDER-USER-SSM argetclassesmapperstudentMapper.xml]'; nested exception is org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. Cause: org.apache.ibatis.builder.BuilderException: Error resolving classCause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'Student'.  Cause: java.lang.ClassNotFoundException: Cannot find class: Student

      • 错误原因:配置文件找不到Student类,说明在填写配置文件全路径可能写错了

      • 解决方法:重新对Student类进行检查,检查配置文件中Student类的路径是否写正确
    • 整合过程可能出现的普遍性错误

      1.在添加pom内容的时候,工程可能会出现一个红叉子,查看problem内容标签,会报如下错误

      • Description Resource  Path  Location   TypeProject configuration is not up-to-date with pom.xml. Select:Maven->Update Project... from the project context menu or use QuickFix.  ORDER-USER-SSM line1 Maven Configuration Problem
      • 出错原因:每当修改pom.xml文件时,工程可能会出现一个红叉子,查看problem标签会报出以上的错误
      • 解决方法:更新maven项目即可

           

    1.4 SSM框架开发用户支付积分的单体系统

    1.4.1 接口文件的介绍

    • 为什么需要接口文件
    1. 作为后端开发人员,可以不具备前端的技术的(可以具备),但是必须能够读懂接口文件,因为接口文件是前端与后端的交流互通的文件(后端之间也有接口文件)
    2. 接口文件是为了协调工作中的各种信息沟通需要的一种规范文档,前端的所有数据,信息交换规范都定义在接口文件中
    • 接口文件的意义
    1. 在大型的团队中,能够实现高效的沟通
    2. 在团队开发中接口文件是一种规范文档,所以责任划分清晰
    • 接口文件的格式
    1. 本文以以下项目的接口文件为例
    2. 实现用户积分查询功能和订单支付积分的接口文件

      

      

    • 接口文件分析:
    • 通过请求地址,和请求参数就可以知道处理器要处理哪个访问地址,即RequestMapping("/user/query/point")
    • 通过请过请求参数就可以知道处理器要接收的参数
    • 通过返回数据就可以知道处理器处理请求之后,要返回响应的数据类型

    1.4.2 编写一个利用SSM框架搭建的具有页面效果的单体系统

    • 项目需求

      1.能够查询用户的积分数:本文的前端页面已经把user的id写死

      2.点击订单支付,完成订单支付,根据用户的支付金额和积分逻辑对用户进行积分的增加

    • 准备前端页面数据的静态文件

      1.为了方便本文的前端页面的请求数据是写死的,本文所需的前端的资源会打包至文件中

      2.添加前端资源到webapp目录下,框住的为添加的前端资源,其目录结构如下:

      3.源文件资源:https://i.cnblogs.com/Files.aspx

      

    • 向数据库中添加数据

      1.在mssm中创建t_user表格,现有如下字段和数据

    1 //键表
    2 //表中有用户id,用户名,用户密码,用户的现有积分和用户的等级
    3 //0代表普通用户
    4 create table t_user (user_id varchar(255) primary key,user_name varchar(255),user_password varchar(255),points int,lev int);
    5 //添加数据
    6 insert into t_user values('1','Mr.Piao','123',0,0);

      2.在mssm中创建t_order表格,现有如下字段和数据

    1 create table t_order(order_id varchar(255)primary key,order_money int,user_id varchar(255));
    2 insert into values('a',5000,'1'),('b',6000,'1'),('c',9000,'1');
    • 根据数据库的表,编写封装数据的domain类

      1.编写User类,根据在框架中设置的驼峰命令

      2.类中的属性驼峰命名对应数据库中类似user_id字段名称"_"后面的字母的首字母变大写

     1 package cn.baidu.domain;
     2 
     3 public class User {
     4     private String userId;
     5     private String userPassword;
     6     private String userName;
     7     private Integer points;
     8     private Integer lev;
     9     
    10     public User(){}
    11     public User(String userId, String userPassword, String userName, Integer points, Integer lev) {
    12         super();
    13         this.userId = userId;
    14         this.userPassword = userPassword;
    15         this.userName = userName;
    16         this.points = points;
    17         this.lev = lev;
    18     }
    19 
    20     public String getUserId() {
    21         return userId;
    22     }
    23 
    24     public void setUserId(String userId) {
    25         this.userId = userId;
    26     }
    27 
    28     public String getUserPassword() {
    29         return userPassword;
    30     }
    31 
    32     public void setUserPassword(String userPassword) {
    33         this.userPassword = userPassword;
    34     }
    35 
    36     public String getUserName() {
    37         return userName;
    38     }
    39 
    40     public void setUserName(String userName) {
    41         this.userName = userName;
    42     }
    43 
    44     public Integer getPoints() {
    45         return points;
    46     }
    47 
    48     public void setPoints(Integer points) {
    49         this.points = points;
    50     }
    51 
    52     public Integer getLev() {
    53         return lev;
    54     }
    55 
    56     public void setLev(Integer lev) {
    57         this.lev = lev;
    58     }
    59 
    60     @Override
    61     public String toString() {
    62         return "User [userId=" + userId + ", userPassword=" + userPassword + ", userName=" + userName + ", points="
    63                 + points + ", lev=" + lev + "]";
    64     }
    65     
    66 
    67 }
    View Code

      3.编写Order类

     1 package cn.baidu.domain;
     2 
     3 public class Order {
     4     
     5     private String orderId;
     6     private Integer orderMoney;
     7     private String userId;
     8     
     9     public Order(){}
    10     public Order(String orderId, Integer orederMoney, String userId) {
    11         super();
    12         this.orderId = orderId;
    13         this.orderMoney = orederMoney;
    14         this.userId = userId;
    15     }
    16 
    17     public String getOrderId() {
    18         return orderId;
    19     }
    20 
    21     public void setOrderId(String orderId) {
    22         this.orderId = orderId;
    23     }
    24 
    25     public Integer getOrederMoney() {
    26         return orderMoney;
    27     }
    28 
    29     public void setOrederMoney(Integer orederMoney) {
    30         this.orderMoney = orederMoney;
    31     }
    32 
    33     public String getUserId() {
    34         return userId;
    35     }
    36 
    37     public void setUserId(String userId) {
    38         this.userId = userId;
    39     }
    40 
    41     @Override
    42     public String toString() {
    43         return "Order [orderId=" + orderId + ", orederMoney=" + orderMoney + ", userId=" + userId + "]";
    44     }
    45     
    46 
    47 }
    View Code
    • 根据接口文件编写查询用户积分功能的代码

      1.编写控制层代码

     1 package cn.baidu.controller;
     2 
     3 import org.springframework.beans.factory.annotation.Autowired;
     4 import org.springframework.stereotype.Controller;
     5 import org.springframework.web.bind.annotation.RequestMapping;
     6 import org.springframework.web.bind.annotation.ResponseBody;
     7 
     8 import cn.baidu.domain.User;
     9 import cn.baidu.service.UserService;
    10 
    11 @Controller
    12 public class UserController {
    13     
    14     @Autowired
    15     private UserService userService;
    16     
    17 //    用户积分的查询,由前端页面分析结果可知,请求地址为/user/query/point
    18 //    前端的请求参数为:String userId
    19 //    前端需要的返回数据是:对象json字符,而且对象至少有一个属性points
    20     @RequestMapping("/user/query/point")
    21     @ResponseBody
    22     public User queryUserPoint(String userId){
    23         return userService.queryUserPoint(userId);
    24     }
    25 }

      2.编写业务层接口代码

    1 package cn.baidu.service;
    2 
    3 import cn.baidu.domain.User;
    4 
    5 public interface UserService {
    6 
    7     public User queryUserPoint(String userId);
    8 
    9 }

      3.编写业务层实现类代码

     1 package cn.baidu.service;
     2 
     3 import org.springframework.beans.factory.annotation.Autowired;
     4 import org.springframework.stereotype.Service;
     5 
     6 import cn.baidu.domain.User;
     7 import cn.baidu.mapper.UserMapper;
     8 
     9 @Service
    10 public class UserServiceImp implements UserService{
    11     
    12     @Autowired
    13     private UserMapper userMapper;
    14 
    15     @Override
    16     public User queryUserPoint(String userId) {
    17         
    18         return userMapper.queryOne(userId);
    19     }
    20 
    21 }

      4.编写UserMapper接口类

     1 package cn.baidu.mapper;
     2 
     3 import cn.baidu.domain.User;
     4 
     5 public interface UserMapper {
     6 
     7     public User queryOne(String userId);
     8         //更新用户积分的方法,后面会用到
     9     public void updateUserPoint(Integer money);
    10 
    11 }

      5.编写UserMapper映射文件

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     3 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
     4 <mapper namespace="cn.baidu.mapper.UserMapper">
     5     <select id="queryOne" resultType="cn.baidu.domain.User">
     6         select * from t_user where user_id=#{userId};
     7     </select>
     8     <!-- 更新用户积分的sql语句 -->
     9     <update id="updateUserPoint" parameterType="int">
    10         update t_user set points=points+#{money} where user_id=1;
    11     </update>
    12 </mapper> 
    • 根据接口文件订单支付与积分的修改

      1.编写控制层代码

     1 package cn.baidu.controller;
     2 
     3 import org.springframework.beans.factory.annotation.Autowired;
     4 import org.springframework.stereotype.Controller;
     5 import org.springframework.web.bind.annotation.RequestMapping;
     6 import org.springframework.web.bind.annotation.ResponseBody;
     7 
     8 import cn.baidu.service.OrderService;
     9 
    10 @Controller
    11 public class OrderController {
    12     
    13     @Autowired
    14     private OrderService orderService;
    15     
    16     @RequestMapping("/order/pay")
    17     @ResponseBody
    18     public Integer orderPay(String orderId){
    19         
    20 //        通过异常来判断是否支付成功,有异常说明支付失败,1表示成功,其他数表示支付失败
    21         try {
    22             //        调用业务层完成支付增加积分
    23             orderService.orderPay(orderId);
    24             return 1;
    25         } catch (Exception e) {
    26             e.printStackTrace();
    27             return 0;
    28         }
    29     }
    30 
    31 }

      2.编写业务层接口代码

    1 package cn.baidu.service;
    2 
    3 public interface OrderService {
    4 
    5     public void orderPay(String orderId);
    6 
    7 }

      3.编写业务层代码

     1 package cn.baidu.service;
     2 
     3 import org.springframework.beans.factory.annotation.Autowired;
     4 import org.springframework.stereotype.Service;
     5 
     6 import cn.baidu.domain.Order;
     7 import cn.baidu.mapper.OrderMapper;
     8 import cn.baidu.mapper.UserMapper;
     9 
    10 @Service
    11 public class OrderServiceImp implements OrderService{
    12 
    13     @Autowired
    14     private OrderMapper orderMapper;
    15     @Autowired
    16     private UserMapper userMapper;
    17     
    18 //    写支付逻辑,有异常支付失败,没有异常支付成功
    19     @Override
    20     public void orderPay(String orderId) {
    21         
    22 //        随便定义一个无异常的输出
    23         System.out.println("支付成功");
    24         
    25 //        定义积分业务逻辑,根据用户支付的订单价钱,增加用户的积分
    26 //        查询订单的信息,获取价钱金额
    27         Order order = orderMapper.queryOrder(orderId);
    28     
    29         System.out.println(order);
    30         Integer money = order.getOrederMoney();        
    31         System.out.println(money);
    32 //        根据获取的用户支付金额,修改用户的积分
    33         userMapper.updateUserPoint(money);
    34     }
    35 
    36 }

      4.编写OrderMapper接口

    1 package cn.baidu.mapper;
    2 
    3 import cn.baidu.domain.Order;
    4 
    5 public interface OrderMapper {
    6 
    7     public Order queryOrder(String orderId);
    8 
    9 }

      5.编写OrderMapper映射文件

    1 <?xml version="1.0" encoding="UTF-8"?>
    2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    3 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    4 <mapper namespace="cn.baidu.mapper.OrderMapper">
    5     <select id="queryOrder" resultType="cn.baidu.domain.Order">
    6         select * from t_order where order_id=#{orderId};
    7     </select>
    8 </mapper> 
    • 启动内置Tomcat浏览器访问:localhost/index.html

      1.点击支付订单和查看积分,如果积分随订单支付而改变说明功能实现完成

      2.数据库的数据也会发生变化

      

      

    • 注意点:

      1.在测试代码的过程中,可能会出现报500错误

      

      • 解决方法:按照控制台的异常轨迹,可知,将spring-mvc.xml文件中的配置解决springmvc返回数据的编解码问题的代码注释掉即可

      

      2.单体系统的问题

      • 在编写单体系统的时候发现代码中出现功能强耦合的问题及订单的支付与用户积分的更新耦合在一起了
      • 此外SSM框架配置比较繁琐,而且当出现高并发的时候,一台服务器是承受不了访问压力的
      • 为了解决高并发和动态资源和静态资源分离的问题就产生了nginx技术
      • 为了解决功能强耦合和配置繁琐的问题就产生了springboot
      • 本人会在今后的博文中对这两门技术进行介绍
      • demo和项目的源文件资源:https://i.cnblogs.com/Files.aspx
  • 相关阅读:
    [组合数取模] 方法汇总
    机房收费系统(VB.NET)——存储过程实战
    Remove Duplicates from Sorted Array
    Android ListFragment实例Demo(自己定义适配器)
    混合模式程序集是针对“v1.1.4322”版的执行时生成的,在没有配置其它信息的情况下,无法在 4.0 执行时中载入该程序集。
    小编接地气——第六届中国云计算大会攻略Q&amp;A
    有统计的百度分享
    Yii CGridView 基本使用(三)关联表相关字段搜索
    扯谈网络编程之Tcp SYN flood洪水攻击
    多平台响应键盘事件!(适用于Cocos2dx 3.0 alpha以上版本号)
  • 原文地址:https://www.cnblogs.com/super-education/p/11064042.html
Copyright © 2011-2022 走看看