本文主要是詳細介紹如何利用maven對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