SSM框架的整合详解(SpringMVC + Spring + MyBatis)

使用SSM框架编写了这么久项目,想为大家分享一点具体SSM框架中具体的详细配置流程和注意事项,希望大家在我的讲解完毕以后,大家在配置整个流程中遇到得到问题迎刃而解,不会让配置框架运行成为大家前进的绊脚石!接下来大家请看SSM框架整合配置详解:

(一)SpringMVC和Spring框架的整合

(1) 先要配置SpringMVC框架的总控制器(DispatcherServlet),用来分发请求以及 URL 与其对应控制器中的相应方法进行请求的处理;

<!-- web.xml配置文件在Tomcat启动时进行解析操作,若客户端的请求除了.jsp 结尾的,都会交给其 DispatcherServlet进行转发处理,
  		它会在其WEB-INF下找其配置的springmvc-servlet的配置文件,配置请求的url地址,和请求服务器端控制器处理类的对应关系,
  		然后控制器类中的方法进行处理请求操作,配置的xml文件名要以<servlet-name>springmvc</servlet-name>中要和springmvc一致-->
  <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>	<!-- Tomcat容器启动的时候,就会自动的装载这个Servlet实例对象 -->
  </servlet>	
  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>	<!-- 缺省的路径请求,除了让默认Tomcat中的servlet处理请求以外,其余的请求都交给该请求分发器来处理 -->
  </servlet-mapping>


(2) 配置组件扫描,配置完在SpringIoC容器创建后,会立即扫描该包下的所有类,凡是使用了注解的类都会通过bean的形式注入到SpringIoC容器当中;

<!-- 配置组件扫描 -->
        <!-- 配置完成以后,就会自动的将该包进行扫描,然后将其类中所有注解的类都通过bean的形式注入进来 -->
        <context:component-scan base-package="com.xupt.ttms"></context:component-scan>



(3) SpringMVC和Spring共用一个SpringIoC容器,需要配置相应的处理器映射以及处理器适配器映射,分别负责将请求 URL 映射到某个处理器和帮助定位到请求处理方法和参数装载等;

<!-- dispatcherServlet配置这两个bean,就知道一个是处理器映射,一个是处理器适配器映射,配合工作是检查bean中的注解 -->
	<!-- 定位到某个处理器对象 -->
	<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/> 
	<!-- 定位到该处理器对象中的某个处理器方法进行业务逻辑处理 -->
	<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>

可以使用注解驱动来代替上面两个映射器的配置:(可以替换映射器的配置)

【示例】:

<mvc:annotation-driven></mvc:annotation-driven>


(4) 若要访问静态资源,静态请求将由 Tomcat 服务器中默认的 Servlet 处理,将其对应的URL 映射到请求的静态资源;

<!-- 配置默认的Servlet处理器,静态请求由Tomcat服务器的Servlet来处理 -->
        <mvc:resources location="/js/" mapping="/js/**"></mvc:resources>
        <mvc:resources location="/css/" mapping="/css/**"></mvc:resources>
        <mvc:resources location="/img/" mapping="/img/**"></mvc:resources>


可以使用Tomcat服务器中的配置来将静态资源映射到jsp页面上:(可以替换<mvc:resource>配置)

【示例】:

<mvc:default-servlet-handler/>

(5) 若要进行多部分请求,例如:文件上传,需要配置具体的多部分表单解析器(可选配置,若有文件上传,就必须要配置多部分请求解析器);

<!-- 配置多部分表单解析器(文件上传) -->
        <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        	<property name="maxInMemorySize" value="5242880"></property><!-- 设置最大一次文件大小 ,超过了就会自动的放在此磁盘上处理-->
			<property name="maxUploadSize" value="10485760"></property>	<!-- 设置文件一次性上传的总大小 (10兆)-->
			<property name="defaultEncoding" value="utf-8"></property>	<!-- 设置文件的默认编码格式  -->
        </bean>


(6) 需配置视图解析器(默认为内部资源视图解析器InternalResourceViewResolver,控制器中某方法执行完请求,返回的逻辑视图名是否存在,都会返回一个内部资源视图对象InternalResourceView对象);

<!-- 配置SpringMVC的内部资源视图解析器 -->
   		<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
   			<property name="prefix" value="/"></property>
   			<property name="suffix" value=".jsp"></property>
   			<property name="order" value="100"></property>
   		</bean>



(二) Spring和MyBatis框架的整合

(1) Spring和MyBatis框架使用同一个数据源;(可以是 dbcp数据源,也可以是C3p0的数据源);

  <!-- 配置数据源 -->
           <!-- destroy-method="close"应用程序结束时,自动的销毁数据库连接池中的所有数据库连接对象 -->
        <bean id="ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        	<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
		   	<property name="url" value="jdbc:mysql://localhost:3306/ttms"></property>
		   	<property name="username" value="root"></property>
		   	<property name="password" value="root"></property>
		   	<property name="maxActive" value="20"></property>
		    <property name="maxIdle" value="15"></property>
		    <property name="maxWait" value="5000"></property>
        </bean>


(2) 配置事务管理器,具体事务操作,开启事务,事务提交,事务回滚,具体交给谁管理;(需要配置数据源,事务管理中需要数据库连接对象,数据库连接对象在其数据库中获取); 

<!-- 配置事务管理器 -->
       <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
       		<!-- 配置数据源,提供当前线程要绑定的数据库连接对象 -->
        	<property name="dataSource" ref="ds"></property>
       </bean>


(3) 配置事务增强,具体是哪些方法需要设置事务处理,需要配置何种事务(只读事务read-only="true",加入事务REQUIRED)并且交给事务管理器进行相应的管理操作;(需要配置相应的事务管理器);

  <!-- 配置事务增强 -->
        <tx:advice id="txAdvice" transaction-manager="txManager">
        	<tx:attributes>	<!-- 配置事务增强属性 -->
        		<tx:method name="get*" read-only="true"/>
        		<tx:method name="find*" read-only="true"/>
        		<tx:method name="search*" read-only="true"/>
        		<tx:method name="*" propagation="REQUIRED"/>
        	</tx:attributes>
        </tx:advice>



(4) 配置AOP切面,具体业务逻辑层中哪些类及其子类中的哪些方法需要织入事务处理(需要配置切点,需要织入事务的一系列连接点;通知器配置,需要织入的是什么事务类型);

<!-- 配置AOP -->
        <aop:config>
        	<!-- 定义切点(需要织入增强的一系列连接点) -->
        	<aop:pointcut expression="execution(public * com.xupt.mcu.service..*.*(..))" id="pc1"/>
        	<!--定义通知器  -->
        	<aop:advisor advice-ref="txAdvice" pointcut-ref="pc1"/>
        </aop:config>


(5) 配置SqlSessionFactory的bean配置,需要配置(数据源、映射数据库访问层接口的xml文件、类型别名包);SqlSessionFactory实例是重量级对象,应用程序中只包含一个,用来创建SqlSession对象,然后根据SqlSession对象创建出对应数据库访问层接口实现类对象,进行数据库操作(SQL语句的执行);

 <!-- 配置SqlSessionFactory的bean实例,需要配置(数据源、映射的xml文件以及类型别名包)
        SqlSessionFactory实例中包含了事务提交方式,数据源,还用映射的Mapper.xml文件,再次需要配置 -->
        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        	<!-- 配置数据源(数据库访问层需要获取当前线程绑定的数据库连接对象操作数据库) -->
        	<property name="dataSource" ref="ds"></property>
        	<!-- 配置类型别名包,使用简化的vo类名-->
        	<property name="typeAliasesPackage" value="com.xupt.ttms.vo"></property>
        	<!-- 配置具体数据库访问层接口映射的xml文件 -->
        	<property name="mapperLocations">
        		<value>classpath:com/xupt/ttms/dao/*Dao.xml</value>
        	</property>
        </bean>


(6) 配置实现Dao层接口的所有bean的实例,需要配置(SqlSessionFactory对象,用来创建SqlSession对象;basePackage用来指定要实例化对象所在的包,一一实例,实例化的对象名称为该包下类名的简化名称);

<!-- 配置实现dao接口的所有bean实例 -->
   		<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
	   		<!-- 首先得获取sqlSession的实例对象,然后创建出实现接口的实例对象,就必须要引用对应的SqlSessionFactory工厂,从中获取SqlSession对象 -->
	     	<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
	     	<!-- 设置其基类的包,然后spring IoC容器在解析xml文件的时候,myBatis框架会自动的搜索这个com.xupt.mcu.dao
	     	包下的所有接口 ,然后将接口挨个实例化,实例化后的对象名称为简化名(userDao),注册到spring IoC容器当中-->
	     	<property name="basePackage" value="com.xupt.ttms.dao"></property>
   		</bean>


附加知识点(了解即可):配置实现Dao层接口的所有bean的实例,需要配置(SqlSessionFactory对象,用来创建SqlSession对象,若业务逻辑层接口只有一个,也可以这样配置,一次只能配置一个实现某个数据库访问层接口实现类,名称可以随意起,但是多个数据库访问层接口,就需要多次这样的配置,较繁琐);

<!-- 实例化Dao层接口的实例对象 -->
      <bean id="prdDao" class="org.mybatis.spring.mapper.MapperFactoryBean">
     	<!-- 首先得获取sqlSession的实例对象,然后创建出实现接口的实例对象,就必须要引用对应的SqlSessionFactory工厂,从中获取SqlSession对象 -->
     	<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
     	<!-- 需要配置接口的完成类名,才可以从SqlSession中获取实现接口的实例对象 -->
     	<property name="mapperInterface" value="com.xupt.dao.ProductDao"></property>
     </bean>


注意:一般项目中有多个数据库访问层接口实现类,使用MappSacnnerConfigurer进行一次性配置,名称即为该接口的简化名;若为测试数据,只有一个数据库访问层接口实现类,可以使用MapperFactoryBean类即可,名称可以随意起;(建议一般使用MappingScannerConfigurer进行配置,简介简单明了)




猜你喜欢

转载自blog.csdn.net/super_yc/article/details/72810465