新聞中心
正如你在前面一節(jié)看到的,在簡(jiǎn)單的場(chǎng)景下,Mybatis 可以為你自動(dòng)映射查詢結(jié)果。但如果遇到復(fù)雜的場(chǎng)景,你需要構(gòu)建一個(gè)結(jié)果映射。 但是在本節(jié)中,你將看到,你可以混合使用這兩種策略。讓我們深入了解一下自動(dòng)映射是怎樣工作的。

創(chuàng)新互聯(lián)是專業(yè)的紹興網(wǎng)站建設(shè)公司,紹興接單;提供網(wǎng)站制作、成都做網(wǎng)站,網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行紹興網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!
當(dāng)自動(dòng)映射查詢結(jié)果時(shí),MyBatis 會(huì)獲取結(jié)果中返回的列名并在 ?Java ?類中查找相同名字的屬性(忽略大小寫)。 這意味著如果發(fā)現(xiàn)了 ID 列和 id 屬性,MyBatis 會(huì)將列 ID 的值賦給 id 屬性。
通常數(shù)據(jù)庫列使用大寫字母組成的單詞命名,單詞間用下劃線分隔;而 ?Java ?屬性一般遵循駝峰命名法約定。為了在這兩種命名方式之間啟用自動(dòng)映射,需要將 ?mapUnderscoreToCamelCase ?設(shè)置為 ?true?。
甚至在提供了結(jié)果映射后,自動(dòng)映射也能工作。在這種情況下,對(duì)于每一個(gè)結(jié)果映射,在 ?ResultSet ?出現(xiàn)的列,如果沒有設(shè)置手動(dòng)映射,將被自動(dòng)映射。在自動(dòng)映射處理完畢后,再處理手動(dòng)映射。 在下面的例子中,?id ?和 ?userName ?列將被自動(dòng)映射,?hashed_password ?列將根據(jù)配置進(jìn)行映射。
有三種自動(dòng)映射等級(jí):
- ?
NONE?- 禁用自動(dòng)映射。僅對(duì)手動(dòng)映射的屬性進(jìn)行映射。 - ?
PARTIAL?- 對(duì)除在內(nèi)部定義了嵌套結(jié)果映射(也就是連接的屬性)以外的屬性進(jìn)行映射 - ?
FULL?- 自動(dòng)映射所有屬性。
默認(rèn)值是 ?PARTIAL?,這是有原因的。當(dāng)對(duì)連接查詢的結(jié)果使用 ?FULL ?時(shí),連接查詢會(huì)在同一行中獲取多個(gè)不同實(shí)體的數(shù)據(jù),因此可能導(dǎo)致非預(yù)期的映射。 下面的例子將展示這種風(fēng)險(xiǎn):
在該結(jié)果映射中,Blog 和 Author 均將被自動(dòng)映射。但是注意 Author 有一個(gè) id 屬性,在 ?ResultSet ?中也有一個(gè)名為 id 的列,所以 Author 的 id 將填入 Blog 的 id,這可不是你期望的行為。 所以,要謹(jǐn)慎使用 FULL。
無論設(shè)置的自動(dòng)映射等級(jí)是哪種,你都可以通過在結(jié)果映射上設(shè)置 ?autoMapping ?屬性來為指定的結(jié)果映射設(shè)置啟用/禁用自動(dòng)映射。
網(wǎng)頁題目:創(chuàng)新互聯(lián)MyBatis教程:MyBatis3XML映射文件-自動(dòng)映射
URL鏈接:http://fisionsoft.com.cn/article/dhhsecp.html


咨詢
建站咨詢
