SSM整合到底整合什么?
1、spring和mybaits整合(数据源》sessionFactory》session)
2、spirng和springMVC整合
为什么要整合到一起?
统一指挥、让两个框架中用到的类和对象,都让spring管理。好处:无缝衔接、用到spring提供的很多工具。
由谁来整合?
mybatis的主配置文件
spring的配置文件
springMVC的配置文件
web.xml
一、mybatis配置文件
这个文件中没有必须添加的内容。因为他的主要内容:数据源连接信息和子配置文件Mapper信息都会在Spring的配置文件中体现
但是我们一般配置以下内容
<configuration> <!--配置mybatis的log实现为LOG4J--> <settings> <setting name="logImpl" value="LOG4J"></setting> </settings> </configuration>
二 、SpringMVC配置文件
这个配置文件的内容要怎么记忆?首先我们要清楚SpringMVC的作用是什么。因为SpringMVC就是用来做页面之间的跳转和数据传递的。所以它的主配置文件的内容都是和这两方面相关的。
另外SpringMVC是Spring的一个子框架 ,所以SpringMVC和Spring之间不需要整合
<!--扫描业务逻辑层的注解--> <context:component-scan base-package="xinmiao.controller,xinmiao.service"></context:component-scan> <mvc:annotation-driven> <mvc:message-converters> <!-- 这是一个消息转换器 如果返回的值是文本类型的 解决控制层到视图层的中文乱码问题--> <bean class="org.springframework.http.converter.StringHttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>application/json;charset=UTF-8</value> <value>text/html;charset=UTF-8</value> </list> </property> </bean> <!-- 这是一个消息转换器 如果返回的是实体类或者集合 解决控制层到视图层的中文乱码问题--> <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>text/html;charset=UTF-8</value> <value>application/json</value> </list> </property> <property name="features"> <list> <!-- Date的日期转换器 --> <value>WriteDateUseDateFormat</value> </list> </property> </bean> </mvc:message-converters> </mvc:annotation-driven> <!-- 配置多视图解析管理器--> <bean id="contentNegotiationManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean"> <!-- 是否启用format参数支持,默认为true--> <property name="favorParameter" value="true"/> <!-- 是否支持.html,.json,.xml等扩展名,默认为true--> <property name="favorPathExtension" value="true"/> <!-- 默认ContentType--> <property name="defaultContentType" value="text/html"/> <!-- 配置映射关系--> <property name="mediaTypes"> <value> json=application/json xml=application/xml html=text/html </value> </property> </bean> <!-- View解析定义,内容协商视图解析器;根据contentNegotiationManager使用的不同mediaTypes 决定不同的view进行响应 默认使用--> <bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"> <!-- 内容协商管理器 用于决定media type--> <property name="contentNegotiationManager" ref="contentNegotiationManager"/> <!-- 默认视图--> <property name="defaultViews"> <list> <bean class="com.alibaba.fastjson.support.spring.FastJsonJsonView"> <property name="charset" value="UTF-8"/> </bean> </list> </property> <property name="viewResolvers"> <list> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/"/> <property name="suffix" value=""/> </bean> </list> </property> </bean> <!-- 解决静态资源加载的问题--> <mvc:resources mapping="/static/**" location="/static/"></mvc:resources> <!-- 配置MultipartResolver,用于上传文件,使用spring的CommonsMultipartResolver --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="maxUploadSize" value="5000000"/> <property name="defaultEncoding" value="UTF-8"/> </bean>
三、spring的配置文件
之前我们已经明白了,spirngMVC不需要spring刻意的去整合,所以spirng中最主要的内容就是整合mybatis。那mybatis我们到底是要整合哪些内容呢?
首先我们要明白mybatis的最根本的目的是要执行sql语句。而sql语句写在Mapper子配置文件中,sql语句最终要再数据库中执行,并且有些sql是需要有事务管理的。
所以spring中首先要把数据源管理起来,还需要把mybaits的主配置文件和子配置文件Mapper管理起来,管理这两样用的Ioc。
接下来我们需要使用AOP在业务逻辑层切入自带的事务管理器。
最后就是把业务逻辑层的bean也加入进来。
<!-- 加载属性文件--> <context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder> <!--此数据源可以替换--> <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${driver}"></property> <property name="url" value="${url}"></property> <property name="username" value="${user}"></property> <property name="password" value="${pwd}"></property> </bean> <!--整合sqlSessionfactory 包涵了数据源(dataSource)配置文件(config)和映射文件(mapper)--> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean" > <property name="dataSource" ref="dataSource"></property> <!--数据源--> <property name="configLocation" value="classpath:mybatis.xml"></property> <!--配置文件--> <property name="mapperLocations" value="classpath:mappers/*.xml"></property> <!--映射文件--> </bean> <!--扫描mapper接口--> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="xinmiao.mapper"></property> </bean> <!--扫描业务逻辑层的注解--> <context:component-scan base-package="xinmiao"></context:component-scan> <!--添加声明式的事务管理器 管理指定的数据源--> <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"></property> </bean> <!--把事务管理器,变成增强(通知),同时指定了方法的事务传播机制--> <tx:advice id="txAdvice" transaction-manager="txManager"> <tx:attributes> <tx:method name="add*" propagation="REQUIRED"/> <tx:method name="update*" propagation="REQUIRED"/> <tx:method name="del*" propagation="REQUIRED"/> <tx:method name="get*" propagation="REQUIRED" read-only="true"/> </tx:attributes> </tx:advice> <aop:config> <aop:pointcut id="servicePointcut" expression="execution(* xinmiao.service.*.*(..))"/> <aop:advisor advice-ref="txAdvice" pointcut-ref="servicePointcut"></aop:advisor> </aop:config> <import resource="springmvc.xml"></import>
四、web.xml配置文件
上面我们配置好了三个框架,框架配置的再好,也得有初始化的地方。自然初始化的地方就是在web.xml中。
<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_3_1.xsd" version="3.1"> <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:springContext.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>encodingFilter</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>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>