沒有必要在 Spring 的 XML 配置檔案中註冊所有的對映器。相反,你可以使用一個 MapperScannerConfigurer , 它 將 會 查 找 類 路 徑 下 的 映 射 器 並 自 動 將 它 們 創 建 成 MapperFactoryBean。
要建立 MapperScannerConfigurer,可以在 Spring 的配置中新增如下程式碼:
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="org.mybatis.spring.sample.mapper" />
</bean>
basePackage 屬性是讓你為對映器介面檔案設定基本的包路徑。 你可以使用分號或逗號 作為分隔符設定多於一個的包路徑。每個對映器將會在指定的包路徑中遞迴地被搜尋到。
MapperScannerConfigurer 屬性不支援使用了 PropertyPlaceholderConfigurer 的屬 性替換,因為會在 Spring 其中之前來它載入。但是,你可以使用 PropertiesFactoryBean 和 SpEL 表示式來作為替代。
注 意 , 沒 有 必 要 去 指 定 SqlSessionFactory 或 SqlSessionTemplate , 因 為 MapperScannerConfigurer 將會建立 MapperFactoryBean,之後自動裝配。但是,如果你使 用了一個 以上的 DataSource ,那 麼自動 裝配可 能會失效 。這種 情況下 ,你可 以使用 sqlSessionFactoryBeanName 或 sqlSessionTemplateBeanName 屬性來設定正確的 bean 名 稱來使用。這就是它如何來配置的,注意 bean 的名稱是必須的,而不是 bean 的引用,因 此,value 屬性在這裡替代通常的 ref:
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
MapperScannerConfigurer 支 持 過 濾 由 指 定 的 創 建 接 口 或 注 解 創 建 映 射 器 。 annotationClass 屬性指定了要尋找的註解名稱。 markerInterface 屬性指定了要尋找的父 介面。如果兩者都被指定了,加入到介面中的對映器會匹配兩種標準。預設情況下,這兩個 屬性都是 null,所以在基包中給定的所有介面可以作為對映器載入。
被發現的對映器將會使用 Spring 對自動偵測元件(參考 Spring 手冊的 3.14.4)預設的命 名策略來命名。也就是說,如果沒有發現註解,它就會使用對映器的非大寫的非完全限定類 名。但是如果發現了@Component 或 JSR-330 的@Named 註解,它會獲取名稱。注意你可以 配 置 到 org.springframework.stereotype.Component , javax.inject.Named(如果你使用 JSE 6 的話)或你自己的註解(肯定是自我註解)中,這 樣註解將會用作生成器和名稱提供器。