javascript
Mybatis源码之与Spring集成包
這次講講Mybatis與Spring的整合,作為兩款優(yōu)秀的開源框架,被大眾廣泛使用,自然是需要強(qiáng)強(qiáng)聯(lián)合的。
使用示例
先看一下怎么使用,首先需要引用這兩款框架的jar包:
<dependency>//spring-webmvc會(huì)自動(dòng)去引入其他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的配置文件中需引入集成包的兩個(gè)類:
org.mybatis.spring.SqlSessionFactoryBean:將Mybatis的SqlSessionFactory注入到Spring的IOC容器中;
org.mybatis.spring.mapper.MapperScannerConfigurer:配置Mybatis接口以及Spring容器中的SqlSessionFactory引用;
配置示例:
<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">//配置數(shù)據(jù)源的引用<property name="dataSource" ref="dataSource"></property>//配置Mybatis對(duì)的配置所在類路徑(可不配)<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層接口所在位置,多個(gè)DAO路徑可用,隔開<property name="basePackage" value="com.test.mybatis.dao"></property>//配置SqlSessionFactoryBean引用名稱<property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryBean"></property> </bean>源碼分析
Spring集成了Mybatis之后Mybatis的配置文件中的標(biāo)簽配置基本可以不需要配置,都可以在Spring中的配置;
先談?wù)勥@兩個(gè)類:
SqlSessionFactoryBean
Mybatis中任何屬性均在在這個(gè)類中可配置:
我們可以發(fā)現(xiàn)這個(gè)實(shí)現(xiàn)了三個(gè)接口:
FactoryBean<SqlSessionFactory>:Spring中Bean存在的一種形式;
InitializingBean:Bean的初始化方法;
ApplicationListener<ApplicationEvent>:Spring IOC容器監(jiān)聽方法,分別在容器創(chuàng)建、關(guān)閉、刷新、停止時(shí)執(zhí)行;
Bean的初始化方法:
在buildSqlSessionFactory方法中就是將Mybatis的流程加載一遍。
容器的監(jiān)聽方法:
MapperScannerConfigurer
該類實(shí)現(xiàn)了:
BeanDefinitionRegistryPostProcessor:?BeanDefinitionRegistry的后置處理器,即在Spring容器創(chuàng)建時(shí)加載,可以修改Bean一些相關(guān)的信息;
InitializingBean:Bean的初始化方法:
ApplicationContextAware:上下文接口的Aware接口,可將容器中上下文對(duì)象開放;
BeanNameAware:Bean名稱Aware接口,可以修改Bean的名稱;
重點(diǎn)談一下以下兩個(gè)方法:
過濾器,在Spring當(dāng)中能夠指定過濾某些類或注解等等,在之前的Spring的文章好像沒有談到,那就下次在說吧:
在掃描的方法中,會(huì)將掃描接口的一些Bean的屬性進(jìn)行改變:
到了這里會(huì)發(fā)現(xiàn)將所有的接口Bean中的Class替換成MapperFactoryBean,那么這些接口所有的Class類型都是MapperFactoryBean了。
其實(shí)集成包中除了之前的兩個(gè)類之外,還有一個(gè)MapperFactoryBean對(duì)象。
MapperFactoryBean
在MapperScannerConfigurer當(dāng)中將所有的接口類型全部替換成MapperFactoryBean,所以在Spring的配置文件也可以這樣配置單個(gè)接口:
<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,不方便,所以一般在企業(yè)級(jí)應(yīng)用中都是配置MapperScannerConfigurer。
這樣我們調(diào)用DAO的接口對(duì)象就是MapperProxy的代理對(duì)象了,就可以操作數(shù)據(jù)庫了
示例:
&將FactoryBean本身的類獲取到,之前談Spring的時(shí)候提到過。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的Mybatis源码之与Spring集成包的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php修改学生信息代码_值得收藏的CRM
- 下一篇: Spring AOP两种使用方式以及如何