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