Mybatis源码之与Spring集成包

10 篇文章 0 订阅
8 篇文章 0 订阅

这次讲讲Mybatis与Spring的整合,作为两款优秀的开源框架,被大众广泛使用,自然是需要强强联合的。

使用示例

先看一下怎么使用,首先需要引用这两款框架的jar包:

<dependency>
    //spring-webmvc会自动去引入其他Spring的核心包
	<groupId>org.springframework</groupId>
	<artifactId>spring-webmvc</artifactId>
	<version>${spring.version}</version>
</dependency>
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-jdbc</artifactId>
	<version>${spring.version}</version>
</dependency>
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-jcl</artifactId>
	<version>${spring.version}</version>
</dependency>
<dependency>
	<groupId>org.mybatis</groupId>
	<artifactId>mybatis</artifactId>
	<version>3.5.6</version>
</dependency>
<dependency>
    //集成包,是Mybatis和Spring的中间桥梁
	<groupId>org.mybatis</groupId>
	<artifactId>mybatis-spring</artifactId>
	<version>1.3.2</version>
</dependency>

在Spring的配置文件中需引入集成包的两个类:

org.mybatis.spring.SqlSessionFactoryBean:将Mybatis的SqlSessionFactory注入到Spring的IOC容器中;

org.mybatis.spring.mapper.MapperScannerConfigurer:配置Mybatis接口以及Spring容器中的SqlSessionFactory引用;

配置示例:

<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
	//配置数据源的引用
    <property name="dataSource" ref="dataSource"></property>
    //配置Mybatis对的配置所在类路径(可不配)
	<property name="configLocation" value="classpath:mybatis-config.xml"></property>
    //配置Mapper文件所在位置
	<property name="mapperLocations">
		<list>
			<value>classpath:com/test/mybatis/dao/*.xml</value>
		</list>
	</property>
</bean>	

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    //配置DAO层接口所在位置,多个DAO路径可用,隔开
	<property name="basePackage" value="com.test.mybatis.dao"></property>
    //配置SqlSessionFactoryBean引用名称
	<property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryBean"></property>
</bean>

源码分析

Spring集成了Mybatis之后Mybatis的配置文件中的标签配置基本可以不需要配置,都可以在Spring中的配置;

先谈谈这两个类:

SqlSessionFactoryBean

Mybatis中任何属性均在在这个类中可配置:

我们可以发现这个实现了三个接口:

FactoryBean<SqlSessionFactory>:Spring中Bean存在的一种形式;

InitializingBean:Bean的初始化方法;

ApplicationListener<ApplicationEvent>:Spring IOC容器监听方法,分别在容器创建、关闭、刷新、停止时执行;

Bean的初始化方法:

在buildSqlSessionFactory方法中就是将Mybatis的流程加载一遍。

容器的监听方法:

MapperScannerConfigurer

该类实现了:

BeanDefinitionRegistryPostProcessor: BeanDefinitionRegistry的后置处理器,即在Spring容器创建时加载,可以修改Bean一些相关的信息;

InitializingBean:Bean的初始化方法:

ApplicationContextAware:上下文接口的Aware接口,可将容器中上下文对象开放;

BeanNameAware:Bean名称Aware接口,可以修改Bean的名称;

重点谈一下以下两个方法:

过滤器,在Spring当中能够指定过滤某些类或注解等等,在之前的Spring的文章好像没有谈到,那就下次在说吧:

在扫描的方法中,会将扫描接口的一些Bean的属性进行改变:

到了这里会发现将所有的接口Bean中的Class替换成MapperFactoryBean,那么这些接口所有的Class类型都是MapperFactoryBean了。

其实集成包中除了之前的两个类之外,还有一个MapperFactoryBean对象。

MapperFactoryBean

在MapperScannerConfigurer当中将所有的接口类型全部替换成MapperFactoryBean,所以在Spring的配置文件也可以这样配置单个接口:

<bean id="userDao" class="org.mybatis.spring.mapper.MapperFactoryBean">
	<property name="mapperInterface" value="com。test。mybatis。dao。UserDao"></property>
	<property name="SqlSessionFactory" ref="sqlSessionFactoryBean"></property>
</bean>

如果接口过多,就需要配置很多MapperFactoryBean,不方便,所以一般在企业级应用中都是配置MapperScannerConfigurer。

这样我们调用DAO的接口对象就是MapperProxy的代理对象了,就可以操作数据库了

示例:

&将FactoryBean本身的类获取到,之前谈Spring的时候提到过。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值