Spring - MapperFactoryBean

1、注入映射器

官網介紹html

爲了代替手工使用 SqlSessionDaoSupport 或 SqlSessionTemplate 編寫數據訪問對象 (DAO)的代碼,MyBatis-Spring 提供了一個動態代理的實現:MapperFactoryBean。這個類 可讓你直接注入數據映射器接口到你的 service 層 bean 中。spring

MapperFactoryBean 動態代理控制着開放和關閉 session,翻譯任意的異常到 Spring 的 DataAccessException 異常中。此外,若是須要或參與到一個已經存在活動事務中,代理將 會開啓一個新的 Spring 事務。 sql

2、MapperFactoryBean

將指定的映射器接口加入到spring中markdown

<bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
  <property name="mapperInterface" value="org.mybatis.spring.sample.mapper.UserMapper" />
  <property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>

注意:
MapperFactoryBean 建立的代理類實現了 UserMapper 接口,而且注入到應用程序中。 由於代理建立在運行時環境中(Runtime) ,那麼指定的映射器必須是一個接口,而 不是一個具體的實現類。session

若是 UserMapper 有一個對應的 MyBatis 的 XML 映射器文件, 若是 XML 文件在類路徑的 位置和映射器類相同時, 它會被 MapperFactoryBean 自動解析。 沒有必要在 MyBatis 配置文 件 中 去 指 定 映 射 器 , 除 非 映 射 器 的 XML 文 件 在 不 同 的 類 路 徑 下(參考前面的文章)。 mybatis

3、MapperScannerConfigurer

可使用一個 MapperScannerConfigurer , 它 將 會 查 找 類 路 徑 下 的 映 射 器 (mapper)並 自 動 將 它 們 創 建 成 MapperFactoryBean。app

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
  <property name="basePackage" value="org.mybatis.spring.sample.mapper" />
</bean>

注意:spa

  • basePackage 屬性是讓你爲映射器接口文件設置基本的包路徑。你可使用分號或逗號做爲分隔符設置多於一個的包路徑。翻譯

  • 不須要指定SqlSessionFactory , 由於 MapperScannerConfigurer 將會建立 MapperFactoryBean,以後自動裝配。代理

  • 可是,若是你使用了一個以上的 DataSource ,那麼自動裝配可能會失效。可使用sqlSessionFactoryBeanName 屬性來設置正確的 bean 名 稱來使用。

特別注意:因爲bean 的名稱是必須的,而不是 bean 的引用,因 此,value 屬性在這裏替代一般的 ref

<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />

被發現的映射器將會使用 Spring 對自動偵測組件,若是沒有特別註解,它就會使用映射器的非大寫的非徹底限定類 名。可是若是@Component 或 JSR-330 的@Named 註解,它會獲取名稱。

注意:這裏不要使用 ref會致使jdbc.properties 文件先被讀取,以至於在使用sqlSessionFactorybean時,jdbc.properties 文件不會被再次讀取。

相關文章
相關標籤/搜索