SSM框架的整合

1.1 Maven整合SSM框架簡介

1.1.1 SSM框架整合概述

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

  1.在對每一個框架整合以前都須要先在Maven的pom.xml配置文件中導入相關的依賴css

  2.導入完依賴接着再在pom.xml配置文件中導入相關插件html

  3.整合各個框架對應的配置文件,把與建立對象相關交給Spring即整合到spring.xml中前端

  4.從新整個各個框架的核心配置文件java

  • 注意點:

  1.每整合完一個框架都要作相應的測試,防止一次性整合完,出現錯誤難以排查mysql

  2.本文以建立一個web項目爲例nginx

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

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

1.2 Maven整合SSM框架整合詳解

1.2.1 在eclipse中建立一個工程

  • 建立工程詳解

  1.建立一個Maven工程,選擇骨架webapp,填寫好座標三要素sql

  

    

  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_v1\ORDER-USER-SSM\target\classes\cn\baidu\mapper\StudentMapper.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_v1\ORDER-USER-SSM\target\classes\mapper\studentMapper.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
相關文章
相關標籤/搜索