MapperFactoryBean 與 MapperScannerConfigurerhtml
Spring注入映射器java
使用mybatis進行數據處理的四種方式sql
①SqlSessionTemplate②SqlSessionDaoSupport③MapperFactoryBean④MapperScannerConfigurersession
①SqlSessionTemplate:這個須要寫配置文件,在實現類中注入sqlsession,再使用sqlsession,是細顆粒控制(非接口開發)mybatis
②SqlSessionDaoSupport(存在與比較老的jar包中):這個只須要在實現類中繼承特殊類(例如HibernateDaoSupport)app
就可使用sqlsession(非接口方式開發)url
③MapperFactoryBean:這個要寫配置文件,把對應的全部接口在配置文件中引用便可,無需寫實現類,須要手動注入(動態代理開發)spa
④MapperScannerConfigurer:這個要寫配置文件,只要給出接口所在的包便可,會自動把包中的接口引入,代理
無需寫實現類,使用註解掃描的方式@Autowired(動態代理)xml
在SpringMVC中,你能夠沒必要爲每個DAO都去寫相應的實現,而交給SpringMVC替你建立。
爲了代替手工使用 SqlSessionDaoSupport 或 SqlSessionTemplate 編寫數據訪問對象 (DAO)的代碼,MyBatis-Spring 提供了一個動態代理的實現:MapperFactoryBean。這個類可讓你直接注入數據映射器接口到你的 service 層 bean 中。當使用映射器時,你僅僅如調 用你的 DAO 同樣調用它們就能夠了,可是你不須要編寫任何 DAO 實現的代碼,由於 MyBatis-Spring 將會爲你建立代理。
數據映射器接口能夠按照以下作法加入到 Spring 中:
MapperFactoryBean 建立的代理類實現了 UserMapper 接口,而且注入到應用程序中。 由於代理建立在運行時環境中(Runtime,譯者注) ,那麼指定的映射器必須是一個接口,而 不是一個具體的實現類。
若是 UserMapper 有一個對應的 MyBatis 的 XML 映射器文件, 若是 XML 文件在類路徑的位置和映射器類相同時(即 .java 與 .xml 文件在同一個包下), 它會被 MapperFactoryBean 自動解析。沒有必要在 MyBatis 配置文件中去指 定映射器 , 除非映射器的 XML 文件在不一樣的類路徑下 。
注意,當 MapperFactoryBean 須要 SqlSessionFactory 或 SqlSessionTemplate 時。這些能夠經過各自的 SqlSessionFactory 或 SqlSessionTemplate 屬性來設置, 或者能夠由 Spring 來自動裝配。若是兩個屬性都設置了,那麼 SqlSessionFactory 就會被忽略,由於 SqlSessionTemplate 是須要有一個 session 工廠的設置; 那個工廠會由 MapperFactoryBean 來使用。
你能夠直接在 business/service 對象中以和注入任意 Spring bean 的相同方式直接注入映射器:
這個 bean 能夠直接在應用程序邏輯中使用:
注意在這段代碼中沒有 SqlSession 或 MyBatis 的引用。也沒有任何須要建立,打開或關閉 session 的代碼, MyBatis-Spring 會來關心它的。
沒有必要在 Spring 的 XML 配置文件中註冊全部的映射器。相反,可使用一個 MapperScannerConfigurer , 它 將 會 查 找 類 路 徑 下 的 映 射 器 並 自 動 將 它 們 創 建 成 MapperFactoryBean。
要建立 MapperScannerConfigurer,能夠在 Spring 的配置中添加以下代碼:
basePackage 屬性是讓你爲映射器接口文件設置基本的包路徑。 你可使用分號或逗號 做爲分隔符設置多於一
個的包路徑。每一個映射器將會在指定的包路徑中遞歸地被搜索到。
總結:
MapperFactoryBean 須要一個一個的配
MapperScannerConfigurer 能夠配置多個