MyBatis MapperScannerConfigurer配置——MyBatis學習筆記之八

      在上一篇博文的示例中,咱們在beans.xml中配置了studentMapper和teacherMapper,供咱們須要時使用。但若是須要用到的映射器較多的話,採用這種配置方式就顯得很低效。爲了解決這個問題,咱們可使用MapperScannerConfigurer,讓它掃描特定的包,自動幫咱們成批地建立映射器。這樣一來,就能大大減小配置的工做量。以下所示(點擊此處進入本示例源程序下載頁面): html

<?xml version="1.0" encoding="utf8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"
default-autowire="byName" default-lazy-init="false">
<!--本示例採用DBCP鏈接池,應預先把DBCP的jar包複製到工程的lib目錄下。
鏈接池配置以下-->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost/courseman"/>
<property name="username" value="courseman"/>
<property name="password" value="abc123"/>
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!--dataSource屬性指定要用到的鏈接池-->
<property name="dataSource" ref="dataSource"/>
<!--configLocation屬性指定mybatis的核心配置文件-->
<property name="configLocation" value="resources/configuration.xml"/>
</bean>
<!--MapperScannerConfigurer配置-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!--basePackage指定要掃描的包,在此包之下的映射器都會被
搜索到。可指定多個包,包與包之間用逗號或分號分隔-->
<property name="basePackage" value="com.abc.mapper"/>
</bean>
</beans>

      這裏須要注意三點: java

      第一,無需指定引用SqlSessionFactory,由於MapperScannerConfigurer在建立映射器時會經過自動裝配的方式來引用。 mysql

      第二,建立的映射器的命名問題。從beans.xml文件中咱們能夠看出,咱們沒有辦法給MapperScannerConfigurer建立的這些映射器指定id或name屬性,它們對咱們彷佛是不可見的。這個問題的解決之道在於採用了Spring針對自動偵測到的組件的默認命名策略,亦即把類/接口名字的首字母小寫,其餘不變,做爲映射器的名字。例如,映射器接口TeacherMapper被掃描後建立的映射器bean名爲teacherMapper。所以,咱們能夠像之前同樣使用這樣的代碼來獲得TeacherMapper實例: spring

TeacherMapper mapper  =  (TeacherMapper)ctx.getBean("teacherMapper");

      第三,可使用@Component註解給映射器指定名稱(本示例的源程序便是採用這種方法)。這裏以TeacherMapper爲例,若想指定生成的映射器bean名稱爲「myTeacherMapper」,步驟以下: sql

      一、在TeacherMapper接口中增長以下聲明:「import org.springframework.stereotype.Component;」; apache

      二、在接口聲明前添加@Component("myTeacherMapper")註解,即指定生成的映射器名稱爲myTeacherMapper。 mybatis

      源碼(TeacherMapper.java)以下: app

package com.abc.mapper;
import com.abc.domain.Teacher;
import org.springframework.stereotype.Component;
@Component("myTeacherMapper")
public interface TeacherMapper {
public Teacher getById(int id);
}

      相應地,在程序中訪問此映射器的代碼應改成: dom

TeacherMapper mapper = (TeacherMapper)ctx.getBean("myTeacherMapper");

      運行結果以下: ide

194913431.png

      還有一點順便說起,若映射器接口(如TeacherMapper接口)與相應的映射配置文件(如TeacherMapper.xml)同名且在同一目錄下,就無需在覈心配置文件configuration.xml中使用mappers元素來指定映射配置文件了。讀者可自行實驗。

參考資料:

一、http://www.mybatis.org/spring/zh/mappers.html#MapperScannerConfigurer(中文)

二、http://www.mybatis.org/spring/mappers.html#MapperScannerConfigurer(英文)

      猛戳這裏全面系統地學習MyBatis 3

      MyBatis技術交流羣:188972810,或掃描二維碼:

wKioL1SaztmBchKiAADsv4YAWBY259.jpg


【MyBatis學習筆記】系列之預備篇一:ant的下載與安裝

【MyBatis學習筆記】系列之預備篇二:ant入門示例

【MyBatis學習筆記】系列之一:MyBatis入門示例

【MyBatis學習筆記】系列之二:MyBatis增刪改示例

【MyBatis學習筆記】系列之三:MyBatis的association示例

【MyBatis學習筆記】系列之四:MyBatis association的兩種形式

【MyBatis學習筆記】系列之五:MyBatis與Spring集成示例

【MyBatis學習筆記】系列之六:MyBatis與Spring集成示例續

【MyBatis學習筆記】系列之七:MyBatis一對多雙向關聯

【MyBatis學習筆記】系列之八:MyBatis MapperScannerConfigurer配置

【MyBatis學習筆記】系列之九:MyBatis collection的兩種形式

【MyBatis學習筆記】系列之十:MyBatis日誌之Log4j示例

【MyBatis學習筆記】系列之十一:MyBatis多參數傳遞之註解方式示例

【MyBatis學習筆記】系列之十二:MyBatis多參數傳遞之默認命名方式示例

【MyBatis學習筆記】系列之十三:MyBatis多參數傳遞之Map方式示例

【MyBatis學習筆記】系列之十四:MyBatis中的N+1問題

【MyBatis學習筆記】系列之十五:MyBatis多參數傳遞之混合方式

【MyBatis學習筆記】系列之十六:Spring聲明式事務管理示例

【MyBatis學習筆記】系列之十七:MyBatis多對多保存示例

【MyBatis學習筆記】系列之十八:MyBatis多對多關聯查詢示例

【MyBatis學習筆記】系列之十九:如何在MyBatis-3.2.7中使用Log4j2 rc2

MyBatis中如何經過繼承SqlSessionDaoSupport來編寫DAO(一)

MyBatis中如何經過繼承SqlSessionDaoSupport來編寫DAO(二)

相關文章
相關標籤/搜索