官網介紹html
爲了代替手工使用 SqlSessionDaoSupport 或 SqlSessionTemplate 編寫數據訪問對象 (DAO)的代碼,MyBatis-Spring 提供了一個動態代理的實現:MapperFactoryBean。這個類 可讓你直接注入數據映射器接口到你的 service 層 bean 中。spring
MapperFactoryBean 動態代理控制着開放和關閉 session,翻譯任意的異常到 Spring 的 DataAccessException 異常中。此外,若是須要或參與到一個已經存在活動事務中,代理將 會開啓一個新的 Spring 事務。 sql
將指定的映射器接口加入到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
可使用一個 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,以後自動裝配。代理
特別注意:因爲bean 的名稱是必須的,而不是 bean 的引用,因 此,value 屬性在這裏替代一般的 ref:
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
被發現的映射器將會使用 Spring 對自動偵測組件,若是沒有特別註解,它就會使用映射器的非大寫的非徹底限定類 名。可是若是@Component 或 JSR-330 的@Named 註解,它會獲取名稱。
注意:這裏不要使用 ref會致使jdbc.properties 文件先被讀取,以至於在使用sqlSessionFactorybean時,jdbc.properties 文件不會被再次讀取。