




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、iBATIS高級(jí)特性1、主要內(nèi)容l 關(guān)聯(lián)對(duì)象l 事務(wù)l 延遲加載l 緩存l 動(dòng)態(tài)標(biāo)簽l 讀寫(xiě)CLOB和BLOB字段l 與spring的整合2、關(guān)聯(lián)對(duì)象 我們的大部分員工習(xí)慣了Hibernate的關(guān)聯(lián)對(duì)象查詢(xún)、級(jí)聯(lián)刪除、級(jí)聯(lián)保存等特性,那么iBATIS是否提供同樣的功能呢?這是大部分人會(huì)關(guān)心的內(nèi)容。 答案也許是另人失望的。iBATIS可以關(guān)聯(lián)查詢(xún),卻沒(méi)有提供級(jí)聯(lián)保存和級(jí)聯(lián)刪除的特性。 下面我們介紹如何處理關(guān)聯(lián)對(duì)象之間的查詢(xún)、保存及刪除問(wèn)題。 關(guān)聯(lián)查詢(xún)iBatis為我們提供了兩種方式關(guān)聯(lián)查詢(xún),第一種N+1次查詢(xún),第二種新支持的查詢(xún)方式。兩種方式需要根據(jù)具體的應(yīng)用環(huán)境,作出合適的選擇。前一種由于多了
2、一次和數(shù)據(jù)庫(kù)的讀取操作,所以讀取速度慢了些,但是可以使用延遲加載減少內(nèi)存的消耗。而后一種方式多了些內(nèi)存消耗,但是讀取速度要快了。定義一個(gè)需求:我們?cè)诓樵?xún)訂單的同時(shí)希望查詢(xún)出其關(guān)聯(lián)的訂單項(xiàng)。 采用N+1次查詢(xún)首先看看我們的SQL Mapped配置文件如何配置的:我們可以看到,RESULT的select屬性指向一個(gè)新的查詢(xún)語(yǔ)句。說(shuō)明:這個(gè)很好的解決了關(guān)聯(lián)查詢(xún)的問(wèn)題,而且如果我們配置了全局的延遲加載,當(dāng)真正用到訂單項(xiàng)的時(shí)候,iBatis才為我們做查詢(xún)的動(dòng)作。但是這卻帶來(lái)了另外一個(gè)問(wèn)題,N+1次查詢(xún)的問(wèn)題。也就是多了一次數(shù)據(jù)庫(kù)的讀操作,有一定的性能損失。 新查詢(xún)方式首先看看我們的SQL Mapped配
3、置文件如何配置的:我們可以看到,RESULT的resultMap屬性指向一個(gè)resultMap標(biāo)簽定義。說(shuō)明:與前面N+1次查詢(xún)方式比較,由于只讀取數(shù)據(jù)庫(kù)一次,的確讀取速度更快了,但是由于存在更多的內(nèi)存消耗(N+1方式可以通過(guò)延遲加載來(lái)減少內(nèi)存的消耗),所以我們?cè)摳鶕?jù)具體的應(yīng)用情況而選擇合適的方式。2.2 級(jí)聯(lián)保存在Hibernate中,我們可以使用級(jí)聯(lián)保存,而iBATIS并沒(méi)有提供該功能特性,此時(shí)我們需要自己保存關(guān)聯(lián)的對(duì)象數(shù)據(jù)。定義一個(gè)需求:在保存訂單的時(shí)候,希望一起保存其關(guān)聯(lián)的訂單項(xiàng)。其DAO層可以定義如下兩個(gè)方法分別保存訂單和關(guān)聯(lián)的訂單項(xiàng):BMO層可以作如下調(diào)用:這里涉及到的事務(wù)等后面講
4、解事務(wù)的時(shí)候再說(shuō)明如何實(shí)現(xiàn)。2.3 級(jí)聯(lián)刪除 同樣iBatis未提供級(jí)連刪除的特性,我們要?jiǎng)h除連關(guān)聯(lián)表一起刪除,也需要自己實(shí)現(xiàn),其方式和保存類(lèi)似,第一次刪除關(guān)聯(lián)的子表如訂單項(xiàng),再刪除其主表如訂單。 3、事務(wù)自動(dòng)事務(wù)所謂自己事務(wù),就是說(shuō)Ibatis API單個(gè)方法自動(dòng)劃分為一個(gè)事務(wù),不需要顯示的開(kāi)始、提交、結(jié)束。其主要針對(duì)一種應(yīng)用程序、一個(gè)資源、且一次只能處理一個(gè)事務(wù)。如圖:其配置如下:實(shí)現(xiàn)方式:說(shuō)明:在Spring已經(jīng)使用AOP申明式事務(wù),所以像上面的配置文件及編碼式事務(wù)使用到的可能性不大。在藍(lán)本工程的其Spring配置如下:只要SMOImpl匹配的類(lèi),其insert*、update
5、*、add*、del*將自動(dòng)使用事務(wù)。事務(wù)全局事務(wù)定義了一個(gè)更大的事務(wù)范圍,它可以夸數(shù)據(jù)庫(kù)、消息隊(duì)列、甚至包含其它應(yīng)用程序。下圖展示了一個(gè)全局的事務(wù)系統(tǒng):下圖展示一個(gè)全局事務(wù)的配置方式:接口和iBATIS的局部事務(wù)相同。這樣當(dāng)需要從局部事務(wù)切換到全局事務(wù)的時(shí)候會(huì)很方方便,只要更改配置文件,不需要更改接口代碼了。4、延遲加載配置方式如下圖:該屬性默認(rèn)值為true,若該屬性值為true,當(dāng)采用N+1次查詢(xún)的時(shí)候,iBatis會(huì)在需要關(guān)聯(lián)數(shù)據(jù)的時(shí)候才開(kāi)始執(zhí)行查詢(xún)。5、緩存6、動(dòng)態(tài)標(biāo)簽主要分為五類(lèi)動(dòng)態(tài)標(biāo)簽:6.1 dynamic標(biāo)簽Dynamic可以使用的屬性如下:屬性功能Prepend(可選)該值作
6、為前綴添加到標(biāo)簽的結(jié)果內(nèi)容提前。但是當(dāng)標(biāo)簽的結(jié)果內(nèi)容體為空的時(shí)候,prpend值將不其作用。Open(可選)該值作為前綴添加到標(biāo)簽的結(jié)果內(nèi)容提前。如果結(jié)果內(nèi)容體為空的時(shí)候,open值將不被附加到其前面。Open值將在prepend屬性值被添加到前綴之前先被添加前綴。例如假設(shè)prepend=”when”,而open=”(”,則最終得到的組合是”when (“。Close(可選)該值作為后綴添加到標(biāo)簽的結(jié)果內(nèi)容提后。如果標(biāo)簽的結(jié)果內(nèi)容體為空的時(shí)候,close值將不起作用。使用示例如下:6.2 二元標(biāo)簽二元標(biāo)簽的屬性如下:屬性功能Property(必選)參數(shù)對(duì)象用于同compareProperty或
7、compareValye作比較的特性Prepend(可選)該值作為前綴添加到標(biāo)簽的結(jié)果內(nèi)容提前。但是當(dāng)標(biāo)簽的結(jié)果內(nèi)容體為空的時(shí)候,prpend值將不其作用。Open(可選)該值作為前綴添加到標(biāo)簽的結(jié)果內(nèi)容提前。如果結(jié)果內(nèi)容體為空的時(shí)候,open值將不被附加到其前面。Open值將在prepend屬性值被添加到前綴之前先被添加前綴。例如假設(shè)prepend=”when”,而open=”(”,則最終得到的組合是”when (“。Close(可選)該值作為后綴添加到標(biāo)簽的結(jié)果內(nèi)容提后。如果標(biāo)簽的結(jié)果內(nèi)容體為空的時(shí)候,close值將不起作用。romoveFirstPrepend(可選)該值用于決定第一個(gè)嵌
8、套的內(nèi)容生成標(biāo)簽是否有移除其prepend值compareProperty、compareValye(兩個(gè)必有其一)用來(lái)同property特性值作比較二元?jiǎng)討B(tài)標(biāo)簽如下:<isEqual>Property屬性與compareProperty或pareValye屬性值作比較,看是否相同<isNotEqual>Property屬性與compareProperty或pareValye屬性值作比較,看是否不同<isGreaterThan>Property屬性是否大于pareProperty或pareValye屬性值<isGreaterEqual>Prope
9、rty屬性與compareProperty或pareValye屬性值作比較,看是否相同<isLessThan>Property屬性與compareProperty或pareValye屬性值作比較,看是否相同<isLessEqual>Property屬性與compareProperty或pareValye屬性值作比較,看是否相同使用示例如下:6.3 一元標(biāo)簽一元標(biāo)簽的屬性如下:屬性功能Property(必選)參數(shù)對(duì)象用于同compareProperty或compareValye作比較的特性Prepend(可選)該值作為前綴添加到標(biāo)簽的結(jié)果內(nèi)容提前。但是當(dāng)標(biāo)簽的結(jié)果內(nèi)容體為
10、空的時(shí)候,prpend值將不其作用。Open(可選)該值作為前綴添加到標(biāo)簽的結(jié)果內(nèi)容提前。如果結(jié)果內(nèi)容體為空的時(shí)候,open值將不被附加到其前面。Open值將在prepend屬性值被添加到前綴之前先被添加前綴。例如假設(shè)prepend=”when”,而open=”(”,則最終得到的組合是”when (“。Close(可選)該值作為后綴添加到標(biāo)簽的結(jié)果內(nèi)容提后。如果標(biāo)簽的結(jié)果內(nèi)容體為空的時(shí)候,close值將不起作用。romoveFirstPrepend(可選)該值用于決定第一個(gè)嵌套的內(nèi)容生成標(biāo)簽是否有移除其prepend值一元標(biāo)簽如下:<isProperty-Available>確定參
11、數(shù)對(duì)象中是否存在所指定的字段。對(duì)于bean,它尋找一個(gè)特性;對(duì)象map,它尋找一個(gè)鍵。<isNotProperty-Available>確定參數(shù)對(duì)象中是否不存在所指定的字段。對(duì)于bean,它尋找一個(gè)特性;對(duì)象map,它尋找一個(gè)鍵。<isNull>確定參數(shù)對(duì)象中是否為空。對(duì)于bean,它尋找一個(gè)特性;對(duì)象map,它尋找一個(gè)鍵。<isNotNull>確定參數(shù)對(duì)象中是否不為空。對(duì)于bean,它尋找一個(gè)特性;對(duì)象map,它尋找一個(gè)鍵。<isEmpty>確定參數(shù)對(duì)象中是否為空、空字符串、空集合或空的String.valueOf().<isNotEmp
12、ty>確定參數(shù)對(duì)象中是否為非空、非空字符串、非空集合或非空的String.valueOf().使用示例如下:6.4 參數(shù)標(biāo)簽參數(shù)標(biāo)簽的屬性如下:屬性功能Prepend(可選)該值作為前綴添加到標(biāo)簽的結(jié)果內(nèi)容提前。但是當(dāng)標(biāo)簽的結(jié)果內(nèi)容體為空的時(shí)候,prpend值將不其作用。Open(可選)該值作為前綴添加到標(biāo)簽的結(jié)果內(nèi)容提前。如果結(jié)果內(nèi)容體為空的時(shí)候,open值將不被附加到其前面。Open值將在prepend屬性值被添加到前綴之前先被添加前綴。例如假設(shè)prepend=”when”,而open=”(”,則最終得到的組合是”when (“。Close(可選)該值作為后綴添加到標(biāo)簽的結(jié)果內(nèi)容提后
13、。如果標(biāo)簽的結(jié)果內(nèi)容體為空的時(shí)候,close值將不起作用。romoveFirstPrepend(可選)該值用于決定第一個(gè)嵌套的內(nèi)容生成標(biāo)簽是否有移除其prepend值參數(shù)標(biāo)簽如下:標(biāo)簽說(shuō)明<isParameterPresent>確定參數(shù)對(duì)象是否存在<isNotParameterPresent>確定參數(shù)對(duì)象是否不存在使用示例如下:6.5<itetate標(biāo)簽>itetate標(biāo)簽的屬性如下:屬性功能Property(必選)參數(shù)對(duì)象用于同compareProperty或compareValye作比較的特性Prepend(可選)該值作為前綴添加到標(biāo)簽的結(jié)果內(nèi)容提前。但
14、是當(dāng)標(biāo)簽的結(jié)果內(nèi)容體為空的時(shí)候,prpend值將不其作用。Open(可選)該值作為前綴添加到標(biāo)簽的結(jié)果內(nèi)容提前。如果結(jié)果內(nèi)容體為空的時(shí)候,open值將不被附加到其前面。Open值將在prepend屬性值被添加到前綴之前先被添加前綴。例如假設(shè)prepend=”when”,而open=”(”,則最終得到的組合是”when (“。Close(可選)該值作為后綴添加到標(biāo)簽的結(jié)果內(nèi)容提后。如果標(biāo)簽的結(jié)果內(nèi)容體為空的時(shí)候,close值將不起作用。Conjunction(可選)連接遍歷集合(數(shù)組)時(shí)重復(fù)產(chǎn)生的那些SQL片段romoveFirstPrepend(可選)該值用于決定第一個(gè)嵌套的內(nèi)容生成標(biāo)簽是否有
15、移除其prepend值使用示例如下:7、讀取CLOB和BLOB字段在使用Oracle數(shù)據(jù)庫(kù)時(shí),讀取CLOB和BLOB等大類(lèi)型的數(shù)據(jù)一直是個(gè)比較犯難的事,一般都是通過(guò)JDBC代碼來(lái)實(shí)現(xiàn)對(duì)CLOB和BLOB數(shù)據(jù)的讀寫(xiě),效果和性能都是最好的,但是代碼也相當(dāng)復(fù)雜,且代碼難以重用。使用Spring的OracleLobHandler類(lèi)處理采用這種方法只對(duì)數(shù)據(jù)源是直接連接Oracle 的JDBC驅(qū)動(dòng)方式有效,如果你采用數(shù)據(jù)連接池作為數(shù)據(jù)源,則這種辦法無(wú)效。根據(jù)我們公司的BSS3.0的情況使用可能性不大。所以這里不作介紹了。實(shí)現(xiàn)Ibatis的TypeHandlerCallback接口sqlMap 的配置如下:說(shuō)明:通過(guò)實(shí)現(xiàn)ibatis的回調(diào)接口來(lái)實(shí)現(xiàn),也有一定的局限性,需要新增一個(gè)類(lèi),配置也不方便,還可能會(huì)出錯(cuò)。通過(guò)配置ParameterMap和ResultMap來(lái)實(shí)現(xiàn)對(duì)LOB類(lèi)型的讀寫(xiě)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 河北省保定市高中2024-2025學(xué)年高一上學(xué)期1月期末調(diào)研考試數(shù)學(xué)試題(B)(解析版)
- 弧形玻璃墻面施工方案
- 2025年安全員-C證考試試卷及答案
- c15墊層施工方案
- 2025年涑水學(xué)校考試試題及答案
- 6年級(jí)上冊(cè)第6單元語(yǔ)文園地課堂筆記
- 矩形渡槽設(shè)計(jì)
- 5年級(jí)上冊(cè)譯林版本英語(yǔ)卡通跟讀第5單元
- 登山扣結(jié)構(gòu)設(shè)計(jì)
- astmg99銷(xiāo)盤(pán)式摩擦試驗(yàn)測(cè)試方法
- 民法典合同編培訓(xùn)
- 2024-2030年中國(guó)油用牡丹行業(yè)需求狀況及產(chǎn)銷(xiāo)規(guī)模預(yù)測(cè)報(bào)告
- 無(wú)機(jī)化學(xué)實(shí)驗(yàn)(下)知到智慧樹(shù)章節(jié)測(cè)試課后答案2024年秋陜西師范大學(xué)
- 高等教育自學(xué)考試自考《英語(yǔ)二》試題及答案指導(dǎo)(2025年)
- 2024年皖北衛(wèi)生職業(yè)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)
- 軍工產(chǎn)品保密協(xié)議
- 商務(wù)數(shù)據(jù)分析理論試題題庫(kù)及答案
- 醫(yī)療安全(不良)事件報(bào)告制度培訓(xùn)課件
- 2025屆高考英語(yǔ)一輪復(fù)習(xí)應(yīng)用文之申請(qǐng)信課件
- DB34-T 4859-2024 農(nóng)村河道清淤規(guī)范
- 【課件】秦統(tǒng)一中國(guó)+課件-2024-2025學(xué)年統(tǒng)編版七年級(jí)歷史上冊(cè)
評(píng)論
0/150
提交評(píng)論