目錄
- 1.SSM介紹
- 1.1 什么是SSM?
- 1.2 SSM框架
- 1.2.1 Spring
- 1.2.2 SpringMVC
- 1.2.3 MyBatis
- 2.SSM框架整合
- 2.1 建庫建表
- 2.2 創建工程
- 2.3 pom.xml
- 2.4 log4j.properties
- 2.5 db.properties
- 2.6 applicationContext-dao.xml
- 2.7.applicationContext-tx.xml
- 2.8 applicationContext-service.xml
- 2.9 springmvc.xml
- 2.10 web.xml
- 2.11 pojo
- 2.12 mapper
- 2.13 service
- 2.14 controller
- 2.15 jsp
- 2.16 測試
- 2.17 項目目錄結構
- 3.待改造的問題
- 3.1 jdbc配置
- 3.2 mybatis配置
- 3.3 transactional配置
- 3.4 service配置
- 3.5 springmvc配置
- 3.6 servlet配置
- 4.相關注解說明
- 4.1 相關注解和xml對應關系
- 4.2 @Configuration
- 4.3 @ComponentScan
- 4.4 @Bean
- 4.5 @PropertySource
- 4.6 @Import
- 5.Spring的純注解配置
- 5.1 JdbcConfig
- 5.2 MybatisConfig
- 5.3 TxConfig
- 5.4 SpringConfig
- 5.5 SpringMvcConfig
- 5.6 WebConfig
- 5.7 刪除xml配置文件
- 5.8 修改web.xml
- 5.9 測試
1.SSM介紹
1.1 什么是SSM?
SSM全稱Spring+SpringMVC+MyBatis,是spring、spring MVC 、和mybatis框架的整合,為標準的MVC模式,是目前比較主流的Java EE企業級框架,適用于搭建各種大型的企業級應用系統。
-
使用Spring實現業務對象的管理;
-
使用SpringMVC負責請求的轉發和視圖的管理;
-
使用MyBatis作為數據對象的持久化引擎。
標準的SSM框架有四層,分別是dao(mapper)
層,service
層,controller
層和View
層。使用spring實現業務對象管理,使用spring MVC負責請求的轉發和視圖管理,mybatis作為數據對象的持久化引擎。
1.2 SSM框架
1.2.1 Spring
Spring是一個開源的控制反轉(IoC)和面向切面(AOP)的容器框架,用來簡化企業開發。
- IOC(控制反轉)
是面向對象編程中的一種設計原則,可以用來減低計算機代碼之間的耦合度,最常見的方式叫做依賴注入(Dependency Injection,簡稱DI),通過控制反轉,對象在被創建的時候,由一個調控系統內所有對象的外界實體將其所依賴的對象的引用傳遞給它。也可以說,依賴被注入到對象中。
- AOP(面向切面編程)
AOP使業務邏輯各部分間的耦合度降低,提高程序可重用性,提高開發效率。
詳細參考:Spring IoC詳解,Spring AOP詳解
1.2.2 SpringMVC
Spring MVC 分離了 控制器、模型 對象、分派器以及處理程序對象的角色,這種分離讓它們更容易進行定制。
SpringMVC的優點:
-
springMVC是使用了MVC設計思想的輕量級web框架,對web層進行解耦,是的我們開發更簡潔。
-
與Spring無縫銜接。
-
靈活的數據驗證,格式化,數據綁定機制。
詳細參考:Spring MVC詳解,Spring MVC攔截器、文件上傳和全局異常處理
1.2.3 MyBatis
MyBatis是一種開源的持久化框架,它通過XML或注解配置SQL映射,將Java對象映射到關系型數據庫中的表。MyBatis可以將數據查詢結果映射成Java對象,也可以將Java對象插入、更新、刪除到數據庫中。
MyBatis的核心組件包括:
-
SqlSessionFactory:創建SqlSession的工廠類,用于生成SqlSession對象。
-
SqlSession:MyBatis與數據庫交互的會話,可以使用SqlSession執行數據庫操作,例如查詢、更新、刪除、插入等。
-
Mapper:Mapper是Java接口,用于定義數據庫操作方法。Mapper接口中的方法名和參數類型與Mapper.xml文件中的SQL語句綁定。
-
Mapper.xml:Mapper.xml文件用于定義SQL語句,包括查詢、更新、刪除、插入等操作,也可以進行參數的動態組裝。
詳細參考:MyBatis詳解
2.SSM框架整合
2.1 建庫建表
CREATE TABLE `account` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(20) DEFAULT NULL,`money` double DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2.2 創建工程
2.3 pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.by</groupId><artifactId>ssm</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging><properties><spring.version>5.2.8.RELEASE</spring.version><slf4j.version>1.6.6</slf4j.version><log4j.version>1.2.12</log4j.version><mysql.version>5.1.47</mysql.version><mybatis.version>3.4.5</mybatis.version><druid.version>1.1.0</druid.version></properties><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</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-webmvc</artifactId><version>${spring.version}</version></dependency><!--mybatis--><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>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.0</version></dependency><!--jsp--><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</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-log4j12</artifactId><version>${slf4j.version}</version></dependency> </dependencies><build><plugins><!-- 配置Tomcat插件 --><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.2</version><configuration><!--端口號--><port>8080</port><!--項目名--><path>/</path><!--按UTF-8進行編碼--><uriEncoding>UTF-8</uriEncoding></configuration></plugin></plugins><resources><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes></resource></resources></build>
</project>
2.4 log4j.properties
log4j.rootLogger=DEBUG,A1log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} - %c%l%m%n
2.5 db.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm?characterEncoding=utf-8
jdbc.username=root
jdbc.password=1111
2.6 applicationContext-dao.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:context="http://www.springframework.org/schema/context"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:tx="http://www.springframework.org/schema/tx"xmlns:aop="http://www.springframework.org/schema/aop"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsdhttp://www.springframework.org/schema/aophttps://www.springframework.org/schema/aop/spring-aop.xsd"><!-- 加載配置文件 --><context:property-placeholder location="classpath:db.properties" /><!-- 數據庫連接池 --><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"destroy-method="close"><property name="url" value="${jdbc.url}" /><property name="username" value="${jdbc.username}" /><property name="password" value="${jdbc.password}" /><property name="driverClassName" value="${jdbc.driver}" /><property name="maxActive" value="10" /><property name="minIdle" value="5" /></bean><!-- 讓spring管理sqlsessionfactory 使用mybatis和spring整合包中的 --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><!-- 數據庫連接池 --><property name="dataSource" ref="dataSource" /><!-- 別名--><property name="typeAliasesPackage" value="com.by.pojo"></property></bean><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="com.by.mapper"></property><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property></bean>
</beans>
2.7.applicationContext-tx.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:context="http://www.springframework.org/schema/context"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:tx="http://www.springframework.org/schema/tx"xmlns:aop="http://www.springframework.org/schema/aop"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsdhttp://www.springframework.org/schema/aophttps://www.springframework.org/schema/aop/spring-aop.xsd"><!-- 事務管理器 --><bean id="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><!-- 數據源 --><property name="dataSource" ref="dataSource"/></bean><!-- 通知 --><tx:advice id="txAdvice" transaction-manager="transactionManager"><tx:attributes><!-- 傳播行為 --><tx:method name="insert*" propagation="REQUIRED"/><tx:method name="delete*" propagation="REQUIRED"/><tx:method name="update*" propagation="REQUIRED"/><tx:method name="select*" propagation="SUPPORTS" read-only="true"/><tx:method name="get*" propagation="SUPPORTS" read-only="true"/></tx:attributes></tx:advice><!-- 切面 --><aop:config><aop:advisor advice-ref="txAdvice"pointcut="execution(* com.by.service.*.*(..))" /></aop:config>
</beans>
2.8 applicationContext-service.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:context="http://www.springframework.org/schema/context"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:tx="http://www.springframework.org/schema/tx"xmlns:aop="http://www.springframework.org/schema/aop"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsdhttp://www.springframework.org/schema/aophttps://www.springframework.org/schema/aop/spring-aop.xsd"><!-- 掃描service的包 --><context:component-scan base-package="com.by.service"></context:component-scan>
</beans>
2.9 springmvc.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:p="http://www.springframework.org/schema/p"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"><!-- 配置創建 spring 容器要掃描的包 --><context:component-scan base-package="com.by.controller"></context:component-scan><!-- 配置視圖解析器 --><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/pages/"></property><property name="suffix" value=".jsp"></property></bean>
</beans>
2.10 web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><!--配置Spring的監聽器 --><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><!-- 解決post亂碼 --><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><!-- springmvc的前端控制器 --><servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>springmvc</servlet-name><!-- 攔截/,例如:/user/add --><url-pattern>/</url-pattern></servlet-mapping>
</web-app>
2.11 pojo
public class Account {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;}@Overridepublic String toString() {return "Account{" +"id=" + id +", name='" + name + '\'' +", money=" + money +'}';}
}
2.12 mapper
public interface AccountMapper {List<Account> selectAccount();
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.by.mapper.AccountMapper"><select id="selectAccount" resultType="Account">select * from account</select>
</mapper>
2.13 service
@Service
public class AccountServiceImpl implements AccountService {@Autowiredprivate AccountMapper accountMapper;@Overridepublic List<Account> selectAccount() {return accountMapper.selectAccount();}
}
2.14 controller
@Controller
@RequestMapping("/account")
public class AccountController {@Autowiredprivate AccountService accountService;@RequestMapping("/selectAccount")public String selectAccount(Model model){List<Account> list = accountService.selectAccount();model.addAttribute("list",list);return "select_account";}
}
2.15 jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head><title>Title</title>
</head>
<body>
<h2>查詢所有賬戶</h2>
<table width="30%" border="1" cellspacing="0" cellpadding="0"><tr><th>id</th><th>name</th><th>money</th></tr><c:forEach var="list" items="${list}"><tr><td>${list.id}</td><td>${list.name}</td><td>${list.money}</td></tr></c:forEach>
</table>
</body>
</html>
2.16 測試
2.17 項目目錄結構
3.待改造的問題
我們發現,之所以我們現在離不開xml配置文件,是因為我們有一處很關鍵的配置,如果他要也能用注解配置,那么我們就可以脫離xml文件了:
3.1 jdbc配置
<context:property-placeholder location="classpath:db.properties">
</context:property-placeholder>
<!--數據源-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close"><property name="url" value="${jdbc.url}" /><property name="username" value="${jdbc.username}" /><property name="password" value="${jdbc.password}" /><property name="driverClassName" value="${jdbc.driver}" /><property name="maxActive" value="10" /><property name="minIdle" value="5" />
</bean>
3.2 mybatis配置
<!--sqlSession工廠--><bean id="sessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource"></property><property name="typeAliasesPackage" value="com.by.pojo"></property></bean><!--配置MapperScan掃描mapper接口,并把生成的代理類交給spring去管理--><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="com.by.mapper"></property><property name="sqlSessionFactoryBeanName" value="sessionFactoryBean"></property></bean>
3.3 transactional配置
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"></property></bean><!-- 開啟spring對注解事務的支持 --><tx:annotation-driven transaction-manager="transactionManager"/>
3.4 service配置
<!--掃描service--><context:component-scan base-package="com.by.service"></context:component-scan>
3.5 springmvc配置
<!--配置springmvc要掃描的包--><context:component-scan base-package="com.by.controller,com.by.exception"></context:component-scan><!--開啟注解驅動:配置handlerMapping和handlerAdapter--><mvc:annotation-driven conversion-service="cs"></mvc:annotation-driven><!--配置日期轉換器--><bean id="cs" class="org.springframework.context.support.ConversionServiceFactoryBean"><property name="converters"><set><bean class="com.by.converter.MyDateConverter"></bean></set></property></bean><!--配置視圖解析器--><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/pages/"></property><property name="suffix" value=".jsp"></property></bean><!--配置文件上傳解析器--><bean id="multipartResolver"class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><property name="maxUploadSize" value="5242880" /><property name="defaultEncoding" value="UTF-8" /></bean><!--資源映射器:直接放行無須dispatcherServlet去處理--><mvc:resources location="/head/" mapping="/head/**"/><!--配置攔截器--><mvc:interceptors><mvc:interceptor><mvc:mapping path="/account/**"/><mvc:exclude-mapping path="/account/login"></mvc:exclude-mapping><bean class="com.by.interceptor.LoginInterceptor"></bean></mvc:interceptor></mvc:interceptors>
3.6 servlet配置
<!--配置監聽器:監聽tomcat啟動,加載spring配置文件-->
<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><!--前端控制器-->
<servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc.xml</param-value></init-param><load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping><servlet-name>springmvc</servlet-name><url-pattern>/</url-pattern>
</servlet-mapping>
<!--過濾器-->
<filter><filter-name>CharacterEncodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param>
</filter>
<filter-mapping><filter-name>CharacterEncodingFilter</filter-name><url-pattern>/*</url-pattern>
</filter-mapping>
4.相關注解說明
4.1 相關注解和xml對應關系
注解 | 位置 | 對應的XML標簽 | 作用 |
---|---|---|---|
@Configuration | 類 | 聲明當前類為配置類,相當于xml形式的Spring配置 | |
@ComponentScan | 類 | <context:component-scan> | 用于對Component進行掃描 |
@Bean | 方法 | <bean> | 聲明當前方法的返回值為一個bean |
@PropertySource | 類 | <context:property-placeholder> | 用于加載*.properties文件中的配置 |
@Import | 類 | <import> | 用來導入配置類或者一些需要前置加載的類 |
4.2 @Configuration
-
作用:用于指定當前類是一個spring配置類,可替換web.xml配置文件
-
示例:
/*** spring的配置類*/ @Configuration public class SpringConfiguration{ }
4.3 @ComponentScan
-
作用:
用于指定spring在初始化容器時要掃描的包。作用和在spring的xml配置文件中的:
<context:component-scan base-package="com.by"/>
是一樣的。 -
屬性:
- basePackages:用于指定要掃描的包。和該注解中的value屬性作用一樣。
-
示例代碼
/*** spring的配置類*/ @Configuration @ComponentScan(basePackages = "com.by")//等價于<context:component-scan> public class SpringConfiguration{ }
4.4 @Bean
-
作用:
該注解只能寫在方法上,表明使用此方法創建一個對象,并且放入spring容器。作用和在spring的xml配置文件中的:
<bean/>
是一樣的。 -
屬性:
- name:給當前@Bean注解方法創建的對象指定一個名稱(即bean的id)。
-
示例代碼
public class Dog {private String nam;private Integer age;//set get...... }
@Bean public Dog dog(){Dog dog = new Dog();dog.setNam("二狗");dog.setAge(18);return dog; }
4.5 @PropertySource
-
作用:
用于加載*.properties文件中的配置。作用和在spring的xml配置文件中的:
<context:property-placeholder location="">
是一樣的。 -
屬性:
- value[]:用于指定properties文件位置。如果是在類路徑下,需要寫上classpath:
-
示例代碼
#config.properties nam=二狗 age=18
@PropertySource("classpath:config.properties") public class SpringConfiguration {@Value("${nam}")private String nam;@Value("${age}")private Integer age;@Beanpublic Dog dog(){Dog dog = new Dog();dog.setNam(nam);dog.setAge(age);return dog;} }
4.6 @Import
-
作用:
@Import注解是用來導入配置類或者一些需要前置加載的類。作用和在spring的xml配置文件中的:
<import resource=""></import>
是一樣. -
屬性:
- value[]:用于指定其他配置類的字節碼。
-
示例代碼
@Configuration @ComponentScan(basePackages = "com.by") @Import({Configuration_Other.class}) public class SpringConfiguration {}@PropertySource("classpath:config.properties") public class Configuration_Other {}
5.Spring的純注解配置
5.1 JdbcConfig
import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.PropertySource;
import javax.sql.DataSource;@PropertySource("classpath:db.properties")
public class JdbcConfig {@Value("${jdbc.driver}")private String driver;@Value("${jdbc.url}")private String url;@Value("${jdbc.username}")private String userName;@Value("${jdbc.password}")private String password;@Bean("dataSource")public DataSource getDatasource() {DruidDataSource ds = new DruidDataSource();ds.setDriverClassName(driver);ds.setUrl(url);ds.setUsername(userName);ds.setPassword(password);return ds;}
}
5.2 MybatisConfig
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.mapper.MapperScannerConfigurer;
import org.springframework.context.annotation.Bean;import javax.sql.DataSource;public class MyBatisConfig {@Beanpublic SqlSessionFactoryBean getSqlSessionFactoryBean(DataSource dataSource){SqlSessionFactoryBean ssfb=new SqlSessionFactoryBean();ssfb.setDataSource(dataSource);ssfb.setTypeAliasesPackage("com.by.pojo");return ssfb;}@Beanpublic MapperScannerConfigurer getMapperScannerConfigurer(){MapperScannerConfigurer msc=new MapperScannerConfigurer();msc.setBasePackage("com.by.mapper");return msc;}
}
5.3 TxConfig
import org.springframework.context.annotation.Bean;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import javax.sql.DataSource;public class TxConfig {@Beanpublic PlatformTransactionManager transactionManager(DataSource dataSource){DataSourceTransactionManager ds = new DataSourceTransactionManager();ds.setDataSource(dataSource);return ds;}
}
5.4 SpringConfig
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.transaction.annotation.EnableTransactionManagement;@Configuration
@Import({MyBatisConfig.class, JdbcConfig.class, TxConfig.class})
//等同<context:component-scan base-package="com.by"/>`
@ComponentScan(value = "com.by.service")
//等同于<tx:annotation-driven />,bean的名稱默認取transactionManager
@EnableTransactionManagement
public class SpringConfig {}
5.5 SpringMvcConfig
import com.by.converter.MyDateConverter;
import com.by.interceptor.LoginInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.format.FormatterRegistry;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.view.InternalResourceViewResolver;@Configuration
//等同于<context:component-scan base-package="com.by.controller>
@ComponentScan("com.by.controller")
//等同于<mvc:annotation-driven></mvc:annotation-driven>
@EnableWebMvc
public class SpringMvcConfig implements WebMvcConfigurer {@Beanpublic ViewResolver viewResolver() {InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();viewResolver.setPrefix("/WEB-INF/pages/"); // 設置視圖文件所在目錄viewResolver.setSuffix(".jsp"); // 設置視圖文件后綴名return viewResolver;}@Beanpublic CommonsMultipartResolver multipartResolver(){CommonsMultipartResolver commonsMultipartResolver = new CommonsMultipartResolver();commonsMultipartResolver.setMaxInMemorySize(5242880);commonsMultipartResolver.setDefaultEncoding("utf-8");return commonsMultipartResolver;}@Overridepublic void addFormatters(FormatterRegistry registry) {registry.addConverter(new MyDateConverter());}@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/**").excludePathPatterns("/user/**");}@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler("/head/**").addResourceLocations("/head/");}
}
5.6 WebConfig
import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;import javax.servlet.Filter;/*** 當類擴展了AbstractAnnotationConfigDispatcherServletlnitializer并將其部署到 Servlet容器時,* 容器會自動發現它,并用它來配置Servlet環境*/
public class WebConfig extends AbstractAnnotationConfigDispatcherServletInitializer {//加載Spring配置類protected Class<?>[] getRootConfigClasses() {return new Class[]{SpringConfig.class};}//加載SpringMVC配置類protected Class<?>[] getServletConfigClasses() {return new Class[]{SpringMvcConfig.class};}//設置SpringMVC請求地址攔截規則protected String[] getServletMappings() {return new String[]{"/"};}//設置post請求中文亂碼過濾器@Overrideprotected Filter[] getServletFilters() {CharacterEncodingFilter filter = new CharacterEncodingFilter();filter.setEncoding("utf-8");return new Filter[]{filter};}
}
5.7 刪除xml配置文件
5.8 修改web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><welcome-file-list><welcome-file>login.jsp</welcome-file></welcome-file-list>
</web-app>