SprignMVC myBatis整合(一) 基於MapperFactoryBean

其提供了與整合相關的API:java

SqlSessionFactoryBeanspring

--爲整合應用提供SqlSession對象資源sql

MapperFactoryBeanapache

--根據指定的Mapper接口生成Bean實例session

MapperScannerConfigurermybatis

--根據指定包批量掃描Mapper接口並生成實例oracle

 

SqlSessionFactoryBean:app

在單獨使用MyBatis時,全部操做都是圍繞SqlSession展開的,SqlSession是經過SqlSessionFactory獲取的,SqlSessionFactory又是經過SqlSessionFactoryBuilder建立生成的。ui

 在SpringMvc+MyBatis整合時,一樣須要SqlSession。SqlSessionFactoryBean這個組件經過原來的SqlSessionFactoryBuilder生成SqlSessionFactory對象,爲整合應用提供SqlSession對象。url

<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource">
		<property name="driverClassName" value="oracle.jdbc.OracleDriver" />
		<property name="url" value="jdbc:oracle:thin:@localhost:1521:XE" />
		<property name="username" value="jsd1403" />
		<property name="password" value="root" />
	</bean>

	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="myDataSource" />
		<property name="mapperLocations" value="classpath:com/lydia/entity/*.xml" />
	</bean>

MapperFactoryBean:

其做用是根據Mapper接口獲取咱們想要的Mapper對象,它封裝了原有的session.getMapper()功能的實現。

在定義MapperFactoryBean時,須要注入一下兩個屬性:

--SqlSessionFactoryBean對象,用於提供SqlSession

--要返回Mapper對象的Mapper接口

 

MapperFactoryBean配置以下:

<!-- 方法一:定義mapper -->
	<bean id="deptMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
		<property name="mapperInterface" value="com.lydia.entity.DeptMapper"></property>
		<!-- 指定SqlSessionFactoryBean對象 -->
		<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
	</bean>

MapperScannerConfigurer配置使用:

 

注意:使用MapperFactoryBean時,當有一個Mapper(能夠理解爲表對應的映射文件)就MapperFactoryBean,當mapper少數能夠經過applicationContext配置文件,經過id獲取。

若是大量的mapper,須要使用mybatis-spring.jar經過的MapperScannerConfigurer組件,經過這個組件能夠自動掃描指定包下的各個Mapper接口,並註冊對應的MapperFactoryBean對象。

 

把以前的MapperFactoryBean的配置註釋掉,換成以下配置依然執行經過:

<!--方法2:
         能夠把掃描到的Mapper接口變成Mapper對象-->
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<!--指定要掃描包: 多個包用逗號隔開 -->
		<property name="basePackage" value="com.lydia,com.tarena" />
		<!--指定sqlSessionFactory -->
		<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
	</bean>

 注意:上面sqlSessionFactory屬性也能夠不用指定,默認會以Autowired方式注入。

 

   若是指定的某個包下並不徹底是咱們定義的Mapper接口,咱們也能夠經過自定義註解的方式指定生成MapperFactoryBean對象。

配置以下:

<!--方法3:
    只要Mapper類前面加上@MyBatisRepository 這個本身指定的註解就OK-->
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="basePackage" value="com.lydia" />
		<property name="annotationClass" value="com.lydia.annotation.MyBatisRepository" />
	</bean>

自定義註解:MyBatisRepository.java 
public @interface MyBatisRepository {
}


下面也給你們一個思路、 先休息一下 

重寫一下MapperFactoryBean 下面的文檔會一塊兒和你們研究一下。

相關文章
相關標籤/搜索