ssm整合【重点】

ssm整合(一)整合步骤分析

1.前言

1.ssm整合,是指什么?

S(SpringMVC)S(Spring)M(Mybatis)

  1. Spring SpringMVC Mybatis ,简称ssm

  2. Spring整合SpringMVC

  3. Spring整合Mybatis

2.整合的实现方案

  1. 注解 + XML 【推荐】

    ​ 注解: 自定义的类(dao、service)

    XML: jar包中的类(DataSource,DataSourceTransactionManager)

  2. 纯XML

  3. 纯注解

3. 整合流程

  1. Spring整合SpringMVC

  2. Spring整合Mybatis**[ssm整合完成]**

2. spring整合springmvc关键的步骤

<!--
	spring整合springmvc存在的问题:
		tomcat在启动的时候首先就会加载web.xml文件,但是在web.xml文件上
	并没有加载applicationContext文件,所以导致service层的对象没有得到创建
	我们的目标:tomcat服务器启动的时候需要加载applicationContext的文件。
	解决方案: tomcat服务器启动的时候会为每一个web应用创建一个ServerContext对象。
	我们可以利用ServletContext的监听器去加载。
	-->
  • 在web.xml文件上创建一个监听器: ContextLoaderListener 用于加载applicationContext.xml

  • 配置一个context-param的参数

    	
    
    	<!-- 配置Spring提供的监听器,用于加载applicationContext.xml -->
    	<!--
    	    注意:加载文件的路径问题
    	     1)默认会加载WEB-INF目录下applicationContext.xml
    	     2)想修改加载文件的路径,通过contextConfigLocation参数进行修改
    	 -->
    
    	<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>
    
    
    

3.Spring整合Mybatis环境、测试 [重要]

spring整合mybatis最核心是什么?

  • 把sqlMapConfig.xml配置的参数迁移applicationContext文件中。配置:applicationContext.xml
    • 配置数据源
  • 配置SqlSessionFactory工程对象,把mybatis创建Dao接口代理对象,交给Spring管理
    - 包扫描.

01 单独测试mybatis环境

/**
 * 单独测试mybatis环境
 */
public class Test_MyBatis {

    @Test
    public void testFindAll() throws IOException {
        //1.加载SqlMapConfig.xml
        InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");

        //2.创建SqlSessionFactory工厂
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        SqlSessionFactory factory = builder.build(in);

        //3.创建SqlSession对象
        SqlSession sqlSession = factory.openSession();

        //4.生成Dao接口代理
        AccountDao accountDao = sqlSession.getMapper(AccountDao.class);

        //5.调用Dao方法
        System.out.println(accountDao.findAll());

        //6.关闭资源
        sqlSession.close();
        in.close();
    }

}

02 applicationContext.xml


    <!--开启包扫描-->
    <context:component-scan base-package="com.itheima.service"/>

    <!--加载配置文件-->
    <context:property-placeholder location="classpath:db2.properties"/>

    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="${jdbc.driverClassName}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>

    <!--创建SqlSessionFactory对象,因为每一个dao的代理对象都需要从SqlSession中获取,每一个SqlSession又必须从SqlSessionFactory中产生。-->
    <bean id="factory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
    </bean>

    <!--创建一个对象进行包扫描, 扫描mybatis-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.itheima.dao"/>
    </bean>

4.SSM完整的配置

1 db2.properties
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql:///db1
jdbc.username=root
jdbc.password=abc123
2 applicationContext.xml

   <description>Spring整合MyBatis配置</description>

    <!--1. 扫描service包-->
    <!--开启包扫描-->
    <context:component-scan base-package="cn.itcast.service"/>

	 <!--加载配置文件-->
    <context:property-placeholder location="classpath:db2.properties"/>

    <!--2. 创建连接池-->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="com.mysql.jdbc.Driver"/>
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/saas-export?characterEncoding=utf8"/>
        <property name="user" value="root"/>
        <property name="password" value="root"/>
    </bean>

    <!--3. Spring整合MyBatis配置(1)创建SqlSessionFactoryBean对象-->
    <bean class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--A.注入数据源-->
        <property name="dataSource" ref="dataSource"/>
        <!--
        <property name="typeAliasesPackage" value="扫描包,配置别名"/>
        <property name="configLocation" value="配置SqlMapConfig.xml"/>
        <property name="mapperLocations" value="配置加载的映射文件"/>
        -->
    </bean>

    <!--4. Spring整合MyBatis配置(2)创建映射扫描配置-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!--A. 自动加载该路径下的Mapper映射文件-->
        <!--B. 自动加载该路径下的dao接口文件(读取方法上的注解)-->
        <!--C. 自动对包下的所有接口生成代理对象-->
        <property name="basePackage" value="cn.itcast.dao"/>
    </bean>



  <!-- Spring声明式事务  -->
    <!-- 1.事务管理器  封装事务管理代码 commit,rollbac-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>


	 <!--5.2 开启事务注解支持   等于下面2和3  需要在对应方法和实现类(service层) 加上@Transactional
    <tx:annotation-driven transaction-manager="transactionManager"/>

			-->
    
    <!-- 2.事务通知  -->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <!-- 事务特性 -->
        <tx:attributes>
            <tx:method name="*" propagation="REQUIRED" isolation="DEFAULT"/>
        </tx:attributes>
    </tx:advice>
    
    <!-- 3.事务切面 = 通知+切入点  -->
    <aop:config>
         <!-- 3.1 切入点 -->
        <aop:pointcut id="pt" expression="execution(* com.itheima.service.*ServiceImpl.*(..))"/>
        
        <!-- 3.2 通知+切入点 -->
        <aop:advisor advice-ref="txAdvice" pointcut-ref="pt"/>
    </aop:config>

3 springmvc.xml
   <!--配置视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/pages/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

    <!--开启注解扫描-->
    <context:component-scan base-package="com.itheima.web"/>

   <!--3. 开启注解驱动(自动创建处理器映射器、处理器适配器、类型转换器)-->
    <!--RequestMappingHandlerMapping、RequestMappingHandlerAdapter-->

    <mvc:annotation-driven/>
4 web.xml
   <!--1. 【servlet】SpringMVC前端控制器-->	
	<servlet>
		<servlet-name>dispatcherServlet</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>
		<load-on-startup>1</load-on-startup>
	</servlet>
 	<servlet-mapping>
      <servlet-name>dispatcherServlet</servlet-name>
      <!--注意写斜杠要放行静态资源-->
      <url-pattern>/</url-pattern>
   </servlet-mapping>

 <!--2. 【filter】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>
   </filter>
   <filter-mapping>
      <filter-name>characterEncodingFilter</filter-name>
      <url-pattern>/*</url-pattern>
   </filter-mapping>


	<!--
	spring整合springmvc存在的问题:
		tomcat在启动的时候首先就会加载web.xml文件,但是在web.xml文件上
	并没有加载applicationContext文件,所以导致service层的对象没有得到创建

	我们的目标:tomcat服务器启动的时候需要加载applicationContext的文件。

	解决方案: tomcat服务器启动的时候会为每一个web应用创建一个ServerContext对象。
	我们可以利用ServletContext的监听器去加载。
	-->

	<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-mapping>
		<servlet-name>dispatcherServlet</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值