SSM的整合
目錄
一、整合分析
整合的示例:
整合的配置方式:
整合步驟分析:
二、SSM整合
1.建表
2.創建表對應的實體對象
3.創建Service層的java類
4.搭建Spring環境
(1)導入Spring的pom坐標
(2)Spring的配置文件
(3)測試Spring能否獨立運行
5.搭建MyBatis環境
(1)導入MyBatis的pom依賴
(2)MyBatis的配置文件
(3)編寫Account對應的Dao層
(4)測試MyBatis能否獨立運行
6.整合Spring和MyBatis
(1)導入整合的pom依賴
(2)Spring接管MyBatis
(3)改造Service
7.Junit測試整合結果
(1)導入pom依賴
(2)測試整合結果
8.搭建SpringMVC環境
(1)導入Spring的pom依賴
(2)配置web.xml
(3)配置springmvc.xml
(4)編寫AccountController
(5)編寫測試頁面
(6)開啟tomcat測試
9.整合Spring和SpringMVC
(1)配置web.xml
(2)改造AccountController
一、整合分析
整合的示例:
Account的保存和列表查詢整合的配置方式:
Mybatis:XML+注解的方式(最終只有注解) Spring:XML+注解的方式(我們自己寫的類用注解,別人寫的用XML) SpringMVC:XML+注解的方式(和spring的配置思想是一樣的)整合步驟分析:
第一步:保證spring框架可以在maven工程中獨立運行(Spring的IOC環境搭建) 第二步:保證mybatis框架可以在maven工程中獨立運行(Mybatis的環境搭建) 第三步:整合spring和mybatis 思路:讓spring接管SqlSessionFactory的創建以及spring接管代理dao實現類的創建 第四步:通過整合Junit測試spring和mybatis的整合結果 第五步:保證springmvc框架可以在maven工程中獨立運行(SpringMVC環境搭建) 第六步:整合spring和springmv,把service對象注入到controller中二、SSM整合
1.建表
create table account(id int primary key auto_increment,name varchar(40),money float )character set utf8 collate utf8_general_ci;insert into account(name,money) values('aaa',1000); insert into account(name,money) values('bbb',1000); insert into account(name,money) values('ccc',1000);2.創建表對應的實體對象
public class Account {private Integer id;private String name;private Float money; }3.創建Service層的java類
public interface IAccountService {/*** 保存賬戶** @param account*/void saveAccount(Account account); ?/*** 查詢所有賬戶** @return*/List<Account> findAllAccount(); } @Service("accountService") public class AccountServiceImpl implements IAccountService { ?@Overridepublic void saveAccount(Account account) {System.out.println("savaAccount方法執行了");} ?@Overridepublic List<Account> findAllAccount() {System.out.println("findAllAccount方法執行了");return null;} }4.搭建Spring環境
(1)導入Spring的pom坐標
? ? ? ?<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.0.4.RELEASE</version></dependency>(2)Spring的配置文件
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:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> ?<!-- 配置spring創建容器時要掃描的包 --><context:component-scan base-package="com.itheima"><!--制定掃包規則,不掃描@Controller注解的JAVA類,其他的還是要掃描 --><context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/></context:component-scan></beans>(3)測試Spring能否獨立運行
public class Test01Spring {public static void main(String[] args) {ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");IAccountService accountService = applicationContext.getBean("accountService", IAccountService.class);accountService.findAllAccount();accountService.saveAccount(new Account());} } 打印 結果如下: findAllAccount方法執行了 savaAccount方法執行了5.搭建MyBatis環境
(1)導入MyBatis的pom依賴
? ? ? ?<dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.5</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.6</version></dependency><!-- 此次整合用druid的連接池 --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.0.9</version></dependency>(2)MyBatis的配置文件
SqlMapConfig.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration><!-- 使用properties來引入外部properties配置文件的內容--><properties resource="jdbcConfig.properties"></properties><environments default="mysql"><environment id="mysql"><transactionManager type="JDBC"></transactionManager><dataSource type="pooled"><property name="driver" value="${jdbc.driver}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/></dataSource></environment></environments><mappers><!-- 自動掃描指定包下的Dao --><package name="com.itheima.dao"/></mappers> </configuration>druid.properties
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://127.0.0.1:3306/ssm jdbc.username=root jdbc.password=123456(3)編寫Account對應的Dao層
AccountDao.java
@Repository public interface AccountDao {/*** 保存** @param account*/void save(Account account); ?/*** 查詢所有** @return*/List<Account> findAll(); }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="com.itheima.dao.AccountDao"><!-- 查詢所有賬戶 --><select id="findAll" resultType="com.itheima.domain.Account">select * from account</select><!-- 新增賬戶 --><insert id="save" parameterType="com.itheima.domain.Account">insert into account(name,money)values(#{name},#{money})</insert> </mapper>(4)測試MyBatis能否獨立運行
public class Test01MyBatis {private static SqlSessionFactory getSqlSessionFactory() throws IOException {//1.根據xml配置文件創建一個SqlSessionFactory對象String resource = "conf/mybatis-config.xml";InputStream resourceAsStream = Resources.getResourceAsStream(resource);return new SqlSessionFactoryBuilder().build(resourceAsStream);}@Testpublic void test01() throws Exception {//1.獲取SqlSessionFactorySqlSessionFactory sqlSessionFactory = getSqlSessionFactory();//2.獲取sqlSession對象SqlSession session = sqlSessionFactory.openSession();//3.獲取接口的實現類對象AccountDao aDao = session.getMapper(AccountDao.class);Account account = new Account();//4.測試保存方法account.setName("test");account.setMoney(5000f);aDao.save(account);//5.測試查詢方法List<Account> list = aDao.findAll();System.out.println(list);session.commit();session.close();in.close();}6.整合Spring和MyBatis
(1)導入整合的pom依賴
? ? ? ?<!--導入spring和mybatis整合的坐標--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>1.3.0</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.0.4.RELEASE</version></dependency> ?<!--配置aspectJ語言的解析坐標--><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.8.13</version></dependency>(2)Spring接管MyBatis
-
SqlMapConfig.xml配置文件中的東西可以刪除,在Spring配置文件中配置
-
以后也可以在SqlMapConfig.xml配置文件中進行某些配置,和Spring的配置文件共同生效
applicationContext.xml
? ?<!-- 加載配置文件 --><context:property-placeholder location="classpath:druid.properties"/><!-- 配置MyBatis的Session工廠 --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><!-- 數據庫連接池 --><property name="dataSource" ref="dataSource"/><!-- 加載mybatis的全局配置文件 --><property name="configLocation" value="classpath:SqlMapConfig.xml"/></bean><!-- 配置數據源 --><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"><property name="driverClassName" value="${jdbc.driver}"></property><property name="url" value="${jdbc.url}"></property><property name="username" value="${jdbc.username}"></property><property name="password" value="${jdbc.password}"></property></bean> ? ?<!-- 配置Mapper掃描器 --><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="com.itheima.dao"></property></bean> ?<!-- 配置事務管理器 --><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"></property></bean><!-- 配置事務的通知 --><tx:advice id="txAdvice" transaction-manager="transactionManager"><tx:attributes><tx:method name="*" propagation="REQUIRED" read-only="false"/><tx:method name="find*" propagation="SUPPORTS" read-only="true"/></tx:attributes></tx:advice><!-- 配置aop --><aop:config><!-- 配置切入點表達式 --><aop:pointcut expression="execution(* com.itheima.service.impl.*.*(..))" id="pt1"/><!-- 建立通知和切入點表達式的關系 --><aop:advisor advice-ref="txAdvice" pointcut-ref="pt1"/></aop:config>(3)改造Service
@Service("accountService") public class AccountServiceImpl implements IAccountService {//將acountDao注入到AccountServiceImpl中@AutowiredAccountDao accountDao; ?@Overridepublic void saveAccount(Account account) {accountDao.save(account);} ?@Overridepublic List<Account> findAllAccount() {List<Account> accounts = accountDao.findAll();return accounts;} }7.Junit測試整合結果
(1)導入pom依賴
? ? ? ?<!--導入spring和Junit的整合坐標--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>5.0.4.RELEASE</version></dependency>(2)測試整合結果
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = {"classpath:applicationContext.xml"}) public class TestSpringMyBatis {@Autowiredprivate IAccountService accountService; ?@Testpublic void testFindAll() {List list = accountService.findAllAccount();System.out.println(list);} ?@Testpublic void testSave() {Account account = new Account();account.setName("測試賬號");account.setMoney(1234f);accountService.saveAccount(account);} }8.搭建SpringMVC環境
(1)導入Spring的pom依賴
? ? ? ?<!--導入springmvc和servlet api的坐標--><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.0.4.RELEASE</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version></dependency><dependency><groupId>javax.servlet.jsp</groupId><artifactId>jsp-api</artifactId><version>2.0</version></dependency>(2)配置web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"version="2.5"><display-name>ssm_web</display-name><!-- 配置spring mvc的核心控制器 --><servlet><servlet-name>springmvcDispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!-- 配置初始化參數,用于讀取springmvc的配置文件 --><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc.xml</param-value></init-param><!-- 配置servlet的對象的創建時間點:應用加載時創建。取值只能是非0正整數,表示啟動順序 --><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>springmvcDispatcherServlet</servlet-name><url-pattern>/</url-pattern></servlet-mapping><!-- 配置springMVC編碼過濾器 --><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><!-- 啟動過濾器 --><init-param><param-name>forceEncoding</param-name><param-value>true</param-value></init-param></filter><!-- 過濾所有請求 --><filter-mapping><filter-name>CharacterEncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping></web-app>(3)配置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"> ?<!-- 配置創建spring容器要掃描的包 --><context:component-scan base-package="com.itheima.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> ?<!-- 開啟springmvc對注解的支持 --><mvc:annotation-driven></mvc:annotation-driven> </beans>(4)編寫AccountController
@Controller @RequestMapping("account") public class AccountController { ?@RequestMapping("findAllAccount")public String findAllAccount(){System.out.println("執行了查詢賬號");return "success";} } ?(5)編寫測試頁面
find.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>主頁</title></head> <body><a href="account/findAllAccount">訪問查詢賬戶</a></body> </html>(6)開啟tomcat測試
-
訪問該頁面后控制臺打出以下信息:
-
同時頁面跳轉到WEB-INF/pages下的success.jsp頁面
9.整合Spring和SpringMVC
(1)配置web.xml
? ?<!-- 配置spring提供的監聽器,用于啟動服務時加載容器 --><!-- 該監聽器只能加載WEB-INF目錄中名稱為applicationContext.xml的配置文件 --><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!-- 手動指定spring配置文件位置 --><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext.xml</param-value></context-param>(2)改造AccountController
@Controller @RequestMapping("account") public class AccountController { ?//把accountService對象注入進來@AutowiredIAccountService accountService; ?@RequestMapping("findAllAccount")public String findAllAccount(){List<Account> accounts = accountService.findAllAccount();for (Account account : accounts) {System.out.println(account);}return "success";} }?
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
- 上一篇: oracle序列
- 下一篇: Dubbo入门(一)