詳解Java的MyBatis框架與Spring框架整合中的映射器注入
MyBatis-Spring允許你在Service Bean中注入映射器。當(dāng)使用映射器時(shí),就像調(diào)用DAO那樣來(lái)調(diào)用映射器就可以了,但是此時(shí)你就不需要進(jìn)行任何DAO實(shí)現(xiàn)的編碼,因?yàn)镸yBatis會(huì)為你進(jìn)行。
使用注入的映射器,你的代碼就不會(huì)出現(xiàn)任何MyBatis-Spring依賴(lài)和MyBatis依賴(lài)。在我們的應(yīng)用中有這樣一個(gè)簡(jiǎn)單的映射器。你也應(yīng)該知道映射器僅僅是一個(gè)接口:
public interface UserMapper {
User getUser(String userId);
}
這是你使用MyBatis-Spring來(lái)創(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)準(zhǔn)備在Service對(duì)象中注入了:
<bean id="fooService" class="sample.FooServiceImpl"> <property name="userMapper" ref="userMapper"/> </bean>
注:映射器接口全類(lèi)名與映射器xml配置文件的namespace是對(duì)應(yīng)的。
關(guān)于MapperFactoryBean
MapperFactoryBean創(chuàng)建的代理類(lèi)實(shí)現(xiàn)了映射器接口(如上例:UserMapper),并且注入到應(yīng)用程序中。因?yàn)榇韯?chuàng)建在運(yùn)行環(huán)境中,那么指定的映射器必須是一個(gè)接口。而不是一個(gè)具體的實(shí)現(xiàn)類(lèi)。
沒(méi)有必要在Spring的XML配置文件中注冊(cè)所有的映射器。相反,你可以使用一個(gè)MapperScannerConfigurer,它將會(huì)查找類(lèi)路徑下的映射器并自動(dòng)將它們創(chuàng)建成MapperFactoryBeans。要?jiǎng)?chuàng)建MapperScannerConfigurer,可以在Spring的配置中添加如下代碼:
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <propery name="basePackage" value="org.mybatis.spring.sample.mapper"/> </bean>
basePackage屬性是讓你為映射器接口文件設(shè)置基本的包路徑。你可以使用分號(hào)或逗號(hào)作為分隔符設(shè)置多于一個(gè)的包路徑。每個(gè)映射器將會(huì)在指定的包路徑中遞歸地被搜索到。
注意,沒(méi)有必要去指定SqlSessionFactory或SqlSessionTemplate,因?yàn)镸apperScannerConfigurer將會(huì)創(chuàng)建MapperFactoryBean,之后自動(dòng)裝配。但是,如果你使用了一個(gè)以上的DataSource(因此,也是多個(gè)的SqlSessionFactory),那么自動(dòng)裝配可能會(huì)失效。這種情況下,你可以使用sqlSessionFactory或sqlSessionTemplate屬性來(lái)設(shè)置正確的工廠(chǎng)/模板。
MapperScannerConfigurer支持過(guò)濾由指定的創(chuàng)建接口或注解創(chuàng)建映射器。annotationClass屬性指定了要尋找的注解名稱(chēng)。markerInterface屬性指定了要尋找的父接口。如果兩者都被指定了,加入到接口中的映射器會(huì)匹配兩種標(biāo)準(zhǔn)。默認(rèn)情況下,這兩個(gè)屬性都是null,所以在基包中給定的所有接口可以作為映射器加載。
被發(fā)現(xiàn)的映射器將會(huì)使用Spring對(duì)自動(dòng)偵測(cè)組件默認(rèn)的命名策略來(lái)命名。也就是說(shuō),如果沒(méi)有發(fā)現(xiàn)注解,它就會(huì)使用映射器的非大寫(xiě)的非完全限定類(lèi)名。但是如果發(fā)現(xiàn)了@Component或JSR-330@Named注解,它會(huì)獲取名稱(chēng)。
相關(guān)文章
Java File類(lèi)常用方法與文件過(guò)濾器詳解
Java File類(lèi)以抽象的方式代表文件名和目錄路徑名。該類(lèi)主要用于文件和目錄的創(chuàng)建、文件的查找和文件的刪除等。File對(duì)象代表磁盤(pán)中實(shí)際存在的文件和目錄。本篇文章我們來(lái)講解File類(lèi)的常用方法與文件過(guò)濾器2022-04-04
SpringBoot中4種接口冪等性的實(shí)現(xiàn)策略
冪等性是指對(duì)同一操作執(zhí)行多次與執(zhí)行一次的效果相同,不會(huì)因?yàn)橹貜?fù)執(zhí)行而產(chǎn)生副作用,本文整理了4個(gè)SpringBoot實(shí)現(xiàn)接口冪等性的方法,大家可以根據(jù)需要進(jìn)行選擇2025-04-04
Springmvc conver實(shí)現(xiàn)原理及用法解析
這篇文章主要介紹了Springmvc conver實(shí)現(xiàn)原理及用法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10
SpringBoot 在項(xiàng)目啟動(dòng)之后執(zhí)行自定義方法的兩種方式小結(jié)
這篇文章主要介紹了SpringBoot 在項(xiàng)目啟動(dòng)之后執(zhí)行自定義方法的兩種方式小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09
java數(shù)據(jù)結(jié)構(gòu)與算法之插入算法實(shí)現(xiàn)數(shù)值排序示例
這篇文章主要介紹了java數(shù)據(jù)結(jié)構(gòu)與算法之插入算法實(shí)現(xiàn)數(shù)值排序的方法,結(jié)合簡(jiǎn)單實(shí)例形式分析了插入算法的節(jié)點(diǎn)操作與排序相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2016-08-08

