文章目錄
- 1. 搭建整合環境
- 1.1 創建數據庫和表結構
- 1.2 創建maven的工程
- 1.3 pom.xml文件中導入依賴的jar包和插件
- 1.4 編寫實體類,編寫domain目錄下的實體類
- 1.5 編寫dao接口
- 1.6 編寫service接口和實現類
- 2. Spring框架代碼的編寫
- 3. Spring整合SpringMVC框架
- 4. Spring整合MyBatis框架
- 4.1 配置applicationContext.xml配置文件
- 4.2 編寫mybatis的映射文件xxx.xml
- 注意:不需要在dao層接口上加@Repository 註解
- 4.3 在service的繼承類中使用AccountDao對象
- 4.4 編寫測試類:
- 4.5 結果
- 5. 最後附上完整的配置代碼
1. 搭建整合環境
1. 整合說明:SSM整合可以使用多種方式,我選擇XML + 註解的方式
2. 整合的思路
* 先把spring、springmvc、mybatis分別獨立搭建好,沒有問題了再用spring整合springmvc和mybatis
1. 先搭建整合的環境
2. 先把Spring的配置搭建完成
3. 再使用Spring整合SpringMVC框架
4. 最後使用Spring整合MyBatis框架
1.1 創建數據庫和表結構
create database ssm;
use ssm;
create table account(
id int primary key auto_increment,
name varchar(20),
money double
);
1.2 創建maven的工程
1.3 pom.xml文件中導入依賴的jar包和插件
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<spring.version>5.0.2.RELEASE</spring.version>
<slf4j.version>1.6.6</slf4j.version>
<log4j.version>1.2.12</log4j.version>
<mysql.version>8.0.15</mysql.version>
<mybatis.version>3.4.5</mybatis.version>
<spring.security.version>5.0.1.RELEASE</spring.security.version>
</properties>
<dependencies>
<!-- spring -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.6.8</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- log start -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.2</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
<!-- log end -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.0</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>${spring.security.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>${spring.security.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
<version>${spring.security.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-taglibs</artifactId>
<version>${spring.security.version}</version>
</dependency>
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>jsr250-api</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<!--druid連接池-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
</dependencies>
<build>
<!--配置插件-->
<plugins>
<!-- java編譯插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<!-- Tomcat插件 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<!-- 項目訪問路徑 -->
<path>/mybatis</path>
<!-- 訪問項目的端口號 -->
<port>80</port>
</configuration>
</plugin>
</plugins>
</build>
1.4 編寫實體類,編寫domain目錄下的實體類
package cn.wanghao.ssm.domain;
import java.io.Serializable;
public class Account implements Serializable {
private Integer id;
private String name;
private Double money;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Double getMoney() {
return money;
}
public void setMoney(Double money) {
this.money = money;
}
@Override
public String toString() {
return "Account{" +
"id=" + id +
", name='" + name + '\'' +
", money=" + money +
'}';
}
}
1.5 編寫dao接口
package cn.wanghao.ssm.dao;
import cn.wanghao.ssm.domain.Account;
import java.util.List;
public interface AccountDao {
public void saveAccount(Account account);
public List<Account> findAll();
}
1.6 編寫service接口和實現類
package cn.wanghao.ssm.service;
import cn.wanghao.ssm.domain.Account;
import java.util.List;
public interface AccountService {
public void saveAccount(Account account);
public List<Account> findAll();
}
package cn.wanghao.ssm.service.impl;
import cn.wanghao.ssm.domain.Account;
import cn.wanghao.ssm.service.AccountService;
import java.util.List;
@Service
public class AccountServiceImpl implements AccountService {
@Override
public void saveAccount(Account account) {
System.out.println("業務層:保存賬戶信息.");
}
@Override
public List<Account> findAll() {
System.out.println("業務層:查詢所有賬戶信息.");
return null;
}
}
此時目錄:
2. Spring框架代碼的編寫
2.1 在resources目錄下創建applicationContext.xml的配置文件並配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
<!-- 開啓註解掃描,要掃描的是service和dao層的註解,要忽略web層註解,因爲web層讓SpringMVC框架 去管理 -->
<context:component-scan base-package="cn.wanghao.ssm">
<!-- 配置要忽略的註解 -->
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
</beans>
注意:也可以使用下面具體的代碼來代替上面的掃描:
<context:component-scan base-package=“cn.wanghao.ssm.dao”></context:component-scan>
<context:component-scan base-package=“cn.wanghao.ssm.service”></context:component-scan>
2.2 編寫測試方法,進行測試
package cn.wanghao.ssm.test;
import cn.wanghao.ssm.service.AccountService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class ServiceTest {
@Test
public void run1(){
ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
AccountService accountService = ac.getBean("accountService", AccountService.class);
accountService.findAll();
}
}
運行結果如下:
上面報錯是缺少log4j的相應文件產生的,對我們的程序影響不大。如果你看着不順眼,想消除,可以加入下面的配置文件到resources
目錄下:
鏈接:https://pan.baidu.com/s/1czwWFMu0sqa1tgpr8MvzOg | 提取碼:bt49 |
---|
現在項目的目錄如下:
3. Spring整合SpringMVC框架
3.1 搭建和測試SpringMVC的開發環境
3.1.1 在web.xml中配置DispatcherServlet、中文亂碼
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app.xsd"
version="3.1">
<!-- 前端控制器(加載classpath:springmvc.xml 服務器啓動創建servlet) -->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 配置初始化參數,創建完DispatcherServlet對象,加載springmvc.xml配置文件 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<!-- 服務器啓動的時候,讓DispatcherServlet對象創建 -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<!-- 解決中文亂碼過濾器 -->
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
3.1.2 創建springmvc.xml的配置文件並編寫
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 掃描controller的註解,別的不掃描 -->
<context:component-scan base-package="cn.wanghao.ssm">
<context:include-filter type="annotation"
expression="org.springframework.stereotype.Controller"></context:include-filter>
</context:component-scan>
<!-- 開啓對SpringMVC註解的支持 -->
<mvc:annotation-driven></mvc:annotation-driven>
<!-- 配置視圖解析器 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- JSP文件所在的目錄 -->
<property name="prefix" value="/WEB-INF/pages/"></property>
<!-- 文件的後綴名 -->
<property name="suffix" value=".jsp"></property>
</bean>
<!-- 設置靜態資源不過濾 -->
<mvc:resources location="/css/" mapping="/css/**"/>
<mvc:resources location="/images/" mapping="/images/**"/>
<mvc:resources location="/js/" mapping="/js/**"/>
</beans>
3.1.3 測試SpringMVC的框架搭建是否成功
- 刪除項目中的index.jsp,然後新建一個index.jsp並編寫
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<a href="account/testSuccess.do">點擊跳轉到成功頁面</a>
</body>
</html>
- 在
WEB-INF
目錄下建立pages
目錄,然後在pages
目錄下建立success.jsp
頁面並編寫
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<div>成功!</div>
</body>
</html>
- 在項目目錄下建立一個
controller
目錄,然後在controller
目錄下建立AccountController
類並編寫:
package cn.wanghao.ssm.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/account")
public class AccountController {
@RequestMapping("/testSuccess.do")
public String testSuccess(){
System.out.println("springMVC:跳轉到成功頁面...");
return "success";
}
}
啓動服務器,進行測試:
此時的項目結構如下:
3.2 Spring整合SpringMVC的框架
3.2.1 編寫web.xml文件
目的:在controller中能成功的調用service對象中的方法。
在項目啓動的時候,就去加載applicationContext.xml
的配置文件,在web.xml
中配置 ContextLoaderListener
監聽器(該監聽器只能加載WEB-INF目錄下的applicationContext.xml的配置文 件)。
添加的代碼如下:
<!-- 配置Spring的監聽器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 配置加載類路徑的配置文件 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
3.2.2 測試整合是否成功
然後在控制器類中引用業務層對象:
package cn.wanghao.ssm.controller;
import cn.wanghao.ssm.service.AccountService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/account")
public class AccountController {
@Autowired
private AccountService accountService;
@RequestMapping("/testSuccess.do")
public String testSuccess(){
accountService.findAll();
System.out.println("springMVC:跳轉到成功頁面...");
return "success";
}
}
啓動項目運行:
整合成功!
4. Spring整合MyBatis框架
按照正常的思維,是先獨立測試Mybatis框架是否能獨立運行,再整合到spring框架中。由於最終不需要SqlMapConfig.xml
配置文件,所以我習慣直接整合到spring中。
4.1 配置applicationContext.xml配置文件
目的:將Mybatis框架中創建的對象放入Spring 的IOC容器中。
在applicationContext.xml
中配置如下代碼:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
<!-- 開啓註解掃描,要掃描的是service層註解,要忽略web層註解,因爲web層讓SpringMVC框架 去管理 -->
<context:component-scan base-package="cn.wanghao.ssm.service"></context:component-scan>
<!--spring整合mybatis框架-->
<!--1. 引入屬性文件,在配置中佔位使用 -->
<context:property-placeholder location="classpath:druid.properties"/>
<!--2. 配置連接池對象: 使用Druid連接池 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<!--配置連接數據庫的4個基本信息-->
<!-- driverClassName屬性可以不寫,會根據url自動判斷 -->
<property name="driverClassName" value="${driverClassName}"></property>
<property name="url" value="${url}" />
<property name="username" value="root" />
<property name="password" value="xxxxxx" />
</bean>
<!-- 3. 創建會話工廠:SqlSessionFactoryBean -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!-- 別名 -->
<property name="typeAliasesPackage" value="cn.wanghao.ssm.domain"></property>
<!-- sql映射文件路徑。掃描mappers目錄以及子目錄下的所有xml文件 -->
<property name="mapperLocations" value="classpath:mybatis/mappers/**/*.xml"/>
</bean>
<!-- 4. 配置掃描dao的包,由spring創建對象-->
<bean id="mapperScanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="cn.wanghao.ssm.dao"/>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
</bean>
<!-- 配置事務 -->
<!-- 1. 配置一個事務管理器 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!-- 注入 DataSource -->
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 2. 事務的配置 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<!--在 tx:advice 標籤內部 配置事務的屬性 -->
<tx:attributes>
<!-- 對所有的方法設置可讀寫 -->
<tx:method name="*" read-only="false" propagation="REQUIRED"/>
<!-- 優先級高。find方法中對數據庫的操作只能讀數據 -->
<tx:method name="find*" read-only="true" propagation="SUPPORTS"/>
</tx:attributes>
</tx:advice>
<!-- 3. 配置 aop -->
<aop:config>
<!-- 配置切入點表達式 -->
<aop:pointcut expression="execution(* cn.wanghao.ssm.service.impl.*.*(..))" id="pointcut1"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut1"/>
</aop:config>
<!--支持註解驅動的事務管理,指定事務管理器 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
</beans>
druid.properties
:
driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/ssm?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
username=root
password=xxxxxx
# 初始化連接數
initialSize=5
# 連接池的最大數據庫連接數。設爲0表示無限制
maxActive=10
# 從連接池獲取連接等待超時的毫秒數
maxWait=3000
4.2 編寫mybatis的映射文件xxx.xml
這裏我建立如下AccountDao.xml
文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.wanghao.ssm.dao.AccountDao"> <!-- namespace的值是需要配置的dao層下的接口類 -->
<!-- id是要簡化的方法名; resultType返回值的類型類路徑 -->
<select id="findAll" resultType="Account">
select * from account;
</select>
</mapper>
注意:不需要在dao層接口上加@Repository 註解
4.3 在service的繼承類中使用AccountDao對象
package cn.wanghao.ssm.service.impl;
import cn.wanghao.ssm.dao.AccountDao;
import cn.wanghao.ssm.domain.Account;
import cn.wanghao.ssm.service.AccountService;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.List;
@Service
public class AccountServiceImpl implements AccountService {
@Autowired
private AccountDao accountDao;
@Override
public void saveAccount(Account account) {
System.out.println("業務層:保存賬戶信息.");
}
@Override
public List<Account> findAll() {
System.out.println("業務層:查詢所有賬戶信息.");
List<Account> accounts = accountDao.findAll();
for (Account account: accounts) {
System.out.println(account);
}
return null;
}
}
4.4 編寫測試類:
package cn.wanghao.ssm.test;
import cn.wanghao.ssm.service.AccountService;
import cn.wanghao.ssm.service.impl.AccountServiceImpl;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class ServiceTest {
@Test
public void run1(){
ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
AccountService accountService = ac.getBean("accountServiceImpl", AccountService.class);
accountService.findAll();
}
}
注意:ac.getBean("accountServiceImpl", AccountService.class)
這個很關鍵。如果有問題可以參考博客:https://blog.csdn.net/qq_43546676/article/details/105269474
4.5 結果
這樣spring整合springmvc和mybatis就成功了!!!!
5. 最後附上完整的配置代碼
5.1 web.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app.xsd"
version="3.1">
<!-- 配置加載類路徑的配置文件 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:applicationContext.xml</param-value>
</context-param>
<!-- 配置監聽器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 前端控制器(加載classpath:springmvc.xml 服務器啓動創建servlet) -->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 配置初始化參數,創建完DispatcherServlet對象,加載springmvc.xml配置文件 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<!-- 服務器啓動的時候,讓DispatcherServlet對象創建 -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<!-- 解決中文亂碼過濾器 -->
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
5.2 springmvc.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 掃描controller的註解,別的不掃描 -->
<context:component-scan base-package="cn.wanghao.ssm">
<context:include-filter type="annotation"
expression="org.springframework.stereotype.Controller"></context:include-filter>
</context:component-scan>
<!-- 開啓對SpringMVC註解的支持 -->
<mvc:annotation-driven></mvc:annotation-driven>
<!-- 配置視圖解析器 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- JSP文件所在的目錄 -->
<property name="prefix" value="/WEB-INF/pages/"></property>
<!-- 文件的後綴名 -->
<property name="suffix" value=".jsp"></property>
</bean>
<!-- 設置靜態資源不過濾 -->
<mvc:resources location="/css/" mapping="/css/**"/>
<mvc:resources location="/images/" mapping="/images/**"/>
<mvc:resources location="/js/" mapping="/js/**"/>
</beans>
5.3 applicationContext.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
<!-- 開啓註解掃描,要掃描的是service層註解,要忽略web層註解,因爲web層讓SpringMVC框架 去管理 -->
<context:component-scan base-package="cn.wanghao.ssm.service"></context:component-scan>
<!--spring整合mybatis框架-->
<!--1. 引入屬性文件,在配置中佔位使用 -->
<context:property-placeholder location="classpath:druid.properties"/>
<!--2. 配置連接池對象: 使用Druid連接池 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<!--配置連接數據庫的4個基本信息-->
<!-- driverClassName屬性可以不寫,會根據url自動判斷 -->
<property name="driverClassName" value="${driverClassName}"></property>
<property name="url" value="${url}" />
<property name="username" value="root" />
<property name="password" value="xxxxxx" />
</bean>
<!-- 3. 創建會話工廠:SqlSessionFactoryBean -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!-- 別名 -->
<property name="typeAliasesPackage" value="cn.wanghao.ssm.domain"></property>
<!-- sql映射文件路徑。掃描mappers目錄以及子目錄下的所有xml文件 -->
<property name="mapperLocations" value="classpath:mybatis/mappers/**/*.xml"/>
</bean>
<!-- 4. 配置掃描dao的包,由spring創建對象-->
<bean id="mapperScanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="cn.wanghao.ssm.dao"/>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
</bean>
<!-- 配置事務 -->
<!-- 1. 配置一個事務管理器 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!-- 注入 DataSource -->
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 2. 事務的配置 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<!--在 tx:advice 標籤內部 配置事務的屬性 -->
<tx:attributes>
<!-- 對所有的方法設置可讀寫 -->
<tx:method name="*" read-only="false" propagation="REQUIRED"/>
<!-- 優先級高。find方法中對數據庫的操作只能讀數據 -->
<tx:method name="find*" read-only="true" propagation="SUPPORTS"/>
</tx:attributes>
</tx:advice>
<!-- 3. 配置 aop -->
<aop:config>
<!-- 配置切入點表達式 -->
<aop:pointcut expression="execution(* cn.wanghao.ssm.service.impl.*.*(..))" id="pointcut1"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut1"/>
</aop:config>
<!--支持註解驅動的事務管理,指定事務管理器 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
</beans>