Spring笔记(5)-SSM项目整合

SSM整合

SSM分别指代三个框架,即表示层的SpringMVC,业务逻辑层的Spring以及数据访问层的MyBatis。SSM整合即完成这三个框架的整合,在其中,Spring起关键整合作用。由于这是一个Web项目,我们还是需要准备Web项目相关环境,引入基础的依赖。然后修改对应配置完成SSM整合的工作。

Spring与SpringMVC整合

Spring和SpringMVC属于同源,我们完成SSM的整合,要到达的目的是Controller层的Bean对象交给SpringMVC管理,其他对象则交给Spring来管理,即存在两个IOC容器。由于Controller层的对象在初始化的时候,会涉及到Service层的对象,而这两层分别在不同的IOC容器中,初始化时机无法保证同步。因此,我们需要使用ContextLoaderListener监听器来解决相关问题。

Spring提供了监听器ContextLoaderListener,它实现了ServletContextListener接口,可以监听ServletContext的状态。在Web服务器启动的时候,会读取Spring的配置文件,创建Spring的IOC容器。要使用该监听器,我们需要在web.xml中进行相关配置:

1
2
3
4
5
6
7
8
9
<!--监听Spring配置文件-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!--自定义Spring配置文件的位置和名称-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring.xml</param-value>
</context-param>

如果我们没有指定Spring配置文件的位置和名称,那么我们需要使用其默认的位置与名称/WEB-INF/applicationContext.xml。如果指定了,则由我们指定的为准。

这样,在SSM整合的项目中,我们的web.xml中应该包含Spring的编码过滤器、请求方式的过滤器、SpringMVC的前端控制器、以及Spring配置文件的监听器。这里SpringMVC的前端控制器指定了SpringMVC配置文件的位置,Spring配置文件的监听器指定了Spring配置文件的位置。

Spring与MyBatis整合

首先我们需要准备Spring与MyBatis整合的相关依赖,具体如下:

1
2
3
4
5
6
<!--Mybatis和Spring的整合包-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.6</version>
</dependency>

简单回顾MyBatis的工作原理,在MyBatis中,涉及到核心配置文件,Mapper接口以及对应的Mapper配置文件。在使用的时候,我们需要通过核心配置文件获取输入流,然后新建一个SqlSessionFactoryBuilder对象,结合输入流来获取SqlSessionFactory工厂对象,再通过工厂对象创建出SqlSession对象,最终通过SqlSession对象的getMapper方法,得到相应Mapper接口对应的实现类对象。

整合MyBatis和Spring,我们需要在Spring的配置文件中配置SqlSessionFactory的工厂Bean:

1
2
3
4
5
6
7
8
9
<!--配置用于创建SqlSessionFactory的工厂Bean-->
<bean class="org.mybatis.spring.SqlSessionFactoryBean">
<!--设置MyBatis配置文件的路径-->
<property name="configLocation" value="classpath:mybatis-config.xml"/>
<!--设置数据源-->
<property name="dataSource" ref="dataSource"/>
<!--设置映射文件的路径-->
<property name="mapperLocations" value="classpath:mapper/*.xml"/>
</bean>

SqlSessionFactoryBean是一个Factory Bean,它提供的对象为SqlSessionFactory类型的对象,这也就是IOC容器中管理的实际Bean对象。在其中我们可以通过属性设置MyBatis核心配置文件的路径。

当然我们也可以不设置,而是在内部将MyBatis核心配置文件中所有相关配置都进行配置,每个属性都可以找到对应的标签进行设置。这里的mapperLocations用于设置映射文件的路径。默认映射文件和Mapper接口所在路径一致,如果我们也是按照这种方式存放,则不需要设置该属性。

我们也可以设置Mapper接口的扫描配置。这是mybatis-spring依赖提供的类,可以将指定包下所有Mapper接口创建动态代理,并将这些动态代理作为IOC容器的Bean管理,这样我们就可以直接获取到Mapper接口的实现类对象。当然这里需要满足接口和配置文件在同一个包路径下,且将basePackage属性设置为对应的包路径。

1
2
3
4
<!--配置Mapper接口的扫描配置-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.syh.mvc.mapper"/>
</bean>

Spring笔记(5)-SSM项目整合
http://example.com/2022/10/20/Spring笔记-5-SSM项目整合/
作者
EverNorif
发布于
2022年10月20日
许可协议