首先什么是ssm,我简单说一下就是spring,springmvc和mybatis整合的简称,好了,话不多说,首先看整理结构,为了方便整理和开发,我们一般会把不同的属性或配置文件放在不同的包下,我常用的整理结果就是下面这样子
整合流程及思路:
1)Spring和SpringMVC整合:(web.xml)
关系:天然整合,父子容器
1.1 Spring容器的装载:
1)通过在web.xml中配置context-param指定Spring配置文件
2)通过配置监听器,监听Web容器启动,创建Spring容器(读取配置内容进行IOC操作)
<!--1)配置context-param:指定Spring配置文件-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/applicationContext*.xml</param-value>
</context-param>
<!--2)配置监听器ContextLoaderListener:监听web容器的启动,然后读取Spring配置文件创建Spring容器-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
1.2 SpringMVC容器的装载:
1)在web.xml中配置Servlet,该Servlet一般都会配置为优先加载
2)在web容器启动时DispatcherServle就是创建,创建时会进行初始化操作,读取meta-inf下的SpringMVC的配置文件(文件名有约定),IOC创建SpringMVC执行组件
<!--3)配置Servlet,创建SpringMVC容器-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--优先加载-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
其他配置:
中文乱码处理
druid监控配置
2)Spring配置文件:(spring包下):
一般会按照实现功能划分不同配置文件:
2.1 applicationContext.xml**:**
配置业务层实现类,进行扫描包方式转载bean对象,需要先在实现类上使用@Service标识类,在配置文件中扫描实现类所在包
<!--配置Spring基本的IOC功能或其他配置,扫包加载Service....-->
<context:component-scan base-package="com.leixiaoqiao.service.impl"/>
2.2 applicationContext-dao.xml:
配置数据源相关,因为便于后期维护,使用外部属性文件存储数据库连接相关和连接池属性相关,先通过配置bean实现属性文件加载,然后再配置DataSource的bean,在bean标签(通过使用<property>标签,底层通过set方法注入)
注入属性文件中的值
<!--配置数据源相关-->
<!--1)加载外部属性文件-->
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<!--本地属性文件-->
<property name="locations">
<array>
<value>classpath:props/db.properties</value>
<value>classpath:props/druid.properties</value>
</array>
</property>
</bean>
<!--2)配置Druid数据源-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
init-method="init" destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClass}"/>
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
<property name="filters" value="stat" />
<property name="maxActive" value="${pool.maxActive}" />
<property name="initialSize" value="${pool.init}" />
<property name="maxWait" value="${pool.maxWait}" />
<property name="minIdle" value="${pool.minIdle}" />
<property name="timeBetweenEvictionRunsMillis" value="60000" />
<property name="minEvictableIdleTimeMillis" value="300000" />
<property name="testWhileIdle" value="true" />
<property name="testOnBorrow" value="false" />
<property name="testOnReturn" value="false" />
<property name="poolPreparedStatements" value="true" />
<property name="maxOpenPreparedStatements" value="20" />
<property name="asyncInit" value="true" />
</bean>
2.3 applicationContext-tx.xml:
配置基于Spring的事物管理,需要配置Spring提供的事物管理器,开启基于注解的事物支持(只有开启才可以在业务实现类上使用事物注解,需要知道事物注解的常用属性意义和默认属性值)
<!--配置Spring事务管理(实际开发也可以基于注解使用配置)-->
<!--1:配置事务管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!--注入数据源-->
<property name="dataSource" ref="dataSource"/>
</bean>
<!--2:开启注解支持(选事务的tx)-->
<tx:annotation-driven/>
2.4 applicationContext-mybatis.xml:
整合Mybatis框架
<!--1:配置SqlSessionFactoryBean-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!--1.1:注入数据源-->
<property name="dataSource" ref="dataSource"/>
<!--1.2:指定全局配置文件-->
<property name="configLocation" value="classpath:mybatis/mybatis-config.xml"/>
<!--1.3:指定映射文件地址-->
<property name="mapperLocations">
<array>
<!--借助*通配符匹配包下所有映射文件-->
<value>classpath:com/leixiaoqiao/mapper/xml/*.xml</value>
</array>
</property>
</bean>
<!--2:配置Mapper接口扫包创建代理实现类,MapperScannerConfigurer-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!--2.1:指定扫描的mapper接口所在包-->
<property name="basePackage" value="com.leixiaoqiao.mapper"/>
<!--2.2:指定sqlSessionFactory,只能通过value属性设置bean的名称-->
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>
1)通过配置SqlSessionFactoryBean的IOC替换Mybatis创建,需要在bean中配置指定数据源替换以前在全局配置文件中的数据源配置,在bean中指定全局配置文件(也可以通过bean中配置<property>
标签,将以前在全局配置文件中的别名扫包,属性设置,插件,映射文件加载...)
映射文件加载:如果映射文件和mapper接口在同名包下,建议在全局配置文件中进行扫描接口包加载,如果不在同名包下,那么建议在SqlSessionFactoryBean的标签中使用<property name="mapperLocations">
指定
2)通过配置MapperScanConfiguria实现Mapper接口实现类创建,需要给当前bean指定接口所在包,指定使用的SqlSessionFactory的beanName,使用value属性赋值
3)SpringMVC配置文件:(springmvc-servlet)
<!--处理器/控制器加载-->
<context:component-scan base-package="com.leixiaoqiao.controller"/>
<!--注解驱动加载(选mvc的)-->
<mvc:annotation-driven/>
常用配置:
处理器扫描包:
前提在处理器类上需要使用@Controller或@RestController
mvc注解驱动加载:
提供的基于注解的映射器和适配器,基于注解的JSON转换
可选配置:
全局跨域配置:
在前后端分离开发中需要配置
视图解析器
文件上传解析器
拦截器
后端校验
.......
4)Mybatis配置文件:mybatis-config(mybatis全局配置文件)
<configuration>
<settings>
<!-- 开启驼峰命名转换(userId === user_id) -->
<setting name="mapUnderscoreToCamelCase" value="true"/>
<setting name="logImpl" value="log4j"/>
</settings>
<!--定义别名-->
<typeAliases>
<package name="com.leixiaoqiao.pojo"/>
</typeAliases>
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<!-- 使用MySQL方言的分页 -->
<property name="helperDialect" value="mysql"/>
<property name="pageSizeZero" value="true"/>
<property name="reasonable" value="true"/>
</plugin>
</plugins>
</configuration>
别名扫包:
给实体类型定义别名,便于在映射文件中使用别名代替完整的实体类型(包名+类名)
属性设置:
驼峰开启(实现数据库驼峰和Java驼峰映射),可选日志输出配置
插件:
PageHelper插件,常用属性意义
最后:
整合思路脑图:
看完上面这些,可能以后再次回顾时还是不够通透,所以,我把整合思路化成了脑图,另外SSM整合的模板,我也上传了一份到gitee上面,点击我网站页面的最下方,备案号上面的LXQ,可以跳转到我的gitee主页,下载ssm整合模板,最后,整理不易,望喜欢
L.X.Q.