詳解Java的MyBatis框架與Spring框架整合中的映射器注入
MyBatis-Spring允許你在Service Bean中注入映射器。當使用映射器時,就像調(diào)用DAO那樣來調(diào)用映射器就可以了,但是此時你就不需要進行任何DAO實現(xiàn)的編碼,因為MyBatis會為你進行。
使用注入的映射器,你的代碼就不會出現(xiàn)任何MyBatis-Spring依賴和MyBatis依賴。在我們的應用中有這樣一個簡單的映射器。你也應該知道映射器僅僅是一個接口:
public interface UserMapper { User getUser(String userId); }
這是你使用MyBatis-Spring來創(chuàng)建映射器的方式:
<bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"> <property name="sqlSessionFactory" ref="sqlSessionFactory" /> <property name="mapperInterface" value="sample.UserMapper" /> </bean>
現(xiàn)在你的映射器已經(jīng)準備在Service對象中注入了:
<bean id="fooService" class="sample.FooServiceImpl"> <property name="userMapper" ref="userMapper"/> </bean>
注:映射器接口全類名與映射器xml配置文件的namespace是對應的。
關于MapperFactoryBean
MapperFactoryBean創(chuàng)建的代理類實現(xiàn)了映射器接口(如上例:UserMapper),并且注入到應用程序中。因為代理創(chuàng)建在運行環(huán)境中,那么指定的映射器必須是一個接口。而不是一個具體的實現(xiàn)類。
沒有必要在Spring的XML配置文件中注冊所有的映射器。相反,你可以使用一個MapperScannerConfigurer,它將會查找類路徑下的映射器并自動將它們創(chuàng)建成MapperFactoryBeans。要創(chuàng)建MapperScannerConfigurer,可以在Spring的配置中添加如下代碼:
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <propery name="basePackage" value="org.mybatis.spring.sample.mapper"/> </bean>
basePackage屬性是讓你為映射器接口文件設置基本的包路徑。你可以使用分號或逗號作為分隔符設置多于一個的包路徑。每個映射器將會在指定的包路徑中遞歸地被搜索到。
注意,沒有必要去指定SqlSessionFactory或SqlSessionTemplate,因為MapperScannerConfigurer將會創(chuàng)建MapperFactoryBean,之后自動裝配。但是,如果你使用了一個以上的DataSource(因此,也是多個的SqlSessionFactory),那么自動裝配可能會失效。這種情況下,你可以使用sqlSessionFactory或sqlSessionTemplate屬性來設置正確的工廠/模板。
MapperScannerConfigurer支持過濾由指定的創(chuàng)建接口或注解創(chuàng)建映射器。annotationClass屬性指定了要尋找的注解名稱。markerInterface屬性指定了要尋找的父接口。如果兩者都被指定了,加入到接口中的映射器會匹配兩種標準。默認情況下,這兩個屬性都是null,所以在基包中給定的所有接口可以作為映射器加載。
被發(fā)現(xiàn)的映射器將會使用Spring對自動偵測組件默認的命名策略來命名。也就是說,如果沒有發(fā)現(xiàn)注解,它就會使用映射器的非大寫的非完全限定類名。但是如果發(fā)現(xiàn)了@Component或JSR-330@Named注解,它會獲取名稱。
相關文章
SpringCloud如何使用Eureka實現(xiàn)服務之間的傳遞數(shù)據(jù)
這篇文章主要介紹了SpringCloud使用Eureka實現(xiàn)服務之間的傳遞數(shù)據(jù)操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06Java中通過ZipOutputStream類如何將多個文件打成zip
ZipOutputStream?是Java中用于創(chuàng)建ZIP文件的類,它是?java.util.zip?包中的一部分,通過使用?ZipOutputStream?,可以將多個文件壓縮到一個ZIP文件中,這篇文章主要介紹了Java中(ZipOutputStream)如何將多個文件打成zip,需要的朋友可以參考下2023-09-09如何實現(xiàn)nohup?java進程號一直在變方法步驟詳解
這篇文章主要為大家介紹了如何實現(xiàn)nohup?java進程號一直在變方法步驟詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-11-11