標籤:區別 blank mybatis 就會 技術分享 掃描 mil 檔案中 name
MapperFactoryBean 與 MapperScannerConfigurer
Spring注入映射器
使用mybatis進行資料處理的四種方式
①SqlSessionTemplate②SqlSessionDaoSupport③MapperFactoryBean④MapperScannerConfigurer
①SqlSessionTemplate:這個需要寫設定檔,在實作類別中注入sqlsession,再使用sqlsession,是細顆粒控制(非介面開發)
②SqlSessionDaoSupport(存在與比較老的jar包中):這個只需要在實作類別中繼承特殊類(例如HibernateDaoSupport)
就可以使用sqlsession(非介面方式開發)
③MapperFactoryBean:這個要寫設定檔,把對應的所有介面在設定檔中引用即可,無需寫實作類別,需要手動注入(動態代理開發)
④MapperScannerConfigurer:這個要寫設定檔,只要給出介面所在的包即可,會自動把包中的介面引入,
無需寫實作類別,使用註解掃描的方式@Autowired(動態代理)
在SpringMVC中,你可以不必為每一個DAO都去寫相應的實現,而交給SpringMVC替你建立。
為了代替手工使用 SqlSessionDaoSupport 或 SqlSessionTemplate 編寫Data Access Objects (DAO)的代碼,MyBatis-Spring 提供了一個動態代理的實現:MapperFactoryBean。這個類可以讓你直接注入資料對應器介面到你的 service 層 bean 中。當使用映射器時,你僅僅如調 用你的 DAO 一樣調用它們就可以了,但是你不需要編寫任何 DAO 實現的代碼,因為 MyBatis-Spring 將會為你建立代理。
MapperFactoryBean
資料對應器介面可以按照如下做法加入到 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 會來關心它的。
MapperScannerConfigurer
沒有必要在 Spring 的 XML 設定檔中註冊所有的映射器。相反,可以使用一個 MapperScannerConfigurer , 它 將 會 查 找 類 路 徑 下 的 映 射 器 並 自 動 將 它 們 創 建 成 MapperFactoryBean。
要建立 MapperScannerConfigurer,可以在 Spring 的配置中添加如下代碼:
basePackage 屬性是讓你為映射器介面檔案設定基本的包路徑。 你可以使用分號或逗號 作為分隔字元設定多於一
個的包路徑。每個映射器將會在指定的包路徑中遞迴地被搜尋到。
總結:
MapperFactoryBean 需要一個一個的配
MapperScannerConfigurer 可以配置多個
spring與mybatis整合配置MapperFactoryBean 與 MapperScannerConfigurer區別