其提供了與整合相關的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 下面的文檔會一塊兒和你們研究一下。