首先什么是ssm,我简单说一下就是spring,springmvc和mybatis整合的简称,好了,话不多说,首先看整理结构,为了方便整理和开发,我们一般会把不同的属性或配置文件放在不同的包下,我常用的整理结果就是下面这样子

image.png

整合流程及思路:

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插件,常用属性意义

最后:

整合思路脑图:

image.png

看完上面这些,可能以后再次回顾时还是不够通透,所以,我把整合思路化成了脑图,另外SSM整合的模板,我也上传了一份到gitee上面,点击我网站页面的最下方,备案号上面的LXQ,可以跳转到我的gitee主页,下载ssm整合模板,最后,整理不易,望喜欢

image.png

L.X.Q.


温柔赠于四方,自由灵魂独享