




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第第5章章MyBatis高級(jí)特性高級(jí)特性本章內(nèi)容本章內(nèi)容uMybatis緩存緩存u使用存儲(chǔ)過程使用存儲(chǔ)過程u注解注解本章目標(biāo)本章目標(biāo)u理解理解Mybatis緩存原理緩存原理u掌握掌握Mybatis調(diào)用存儲(chǔ)過程調(diào)用存儲(chǔ)過程u了解了解Mybatis中的注解配置中的注解配置Mybatis的緩存機(jī)制的緩存機(jī)制u緩存技術(shù)是一種緩存技術(shù)是一種“以空間換時(shí)間以空間換時(shí)間”的設(shè)計(jì)理念,是利用的設(shè)計(jì)理念,是利用內(nèi)存空間內(nèi)存空間資源來提高數(shù)據(jù)檢索速度的有效手段之一。資源來提高數(shù)據(jù)檢索速度的有效手段之一。uMyBatis包含一個(gè)非常強(qiáng)大的查詢緩存特性,可以非常方便地配置和包含一個(gè)非常強(qiáng)大的查詢緩存特性,可以非常方便
2、地配置和定制。定制。nMyBatis默認(rèn)沒有開啟緩存,除了局部的session緩存。要開啟二級(jí)緩存,需要在SQL映射文件中添加一行 。Mybatis的緩存機(jī)制的緩存機(jī)制u緩存作用緩存作用(1)映射語句文件中的所有select 語句將會(huì)被緩存。 (2)映射語句文件中的所有insert、update和delete語句會(huì)刷新緩存。 (3)緩存會(huì)使用Least Recently Used(LRU,最近最少使用的)算法收回。 (4)根據(jù)時(shí)間表(如no Flush Interval,沒有刷新間隔),緩存不會(huì)以任何時(shí)間順序來刷新。 (5)緩存會(huì)存儲(chǔ)列表集合或?qū)ο螅o論查詢方法返回什么)的1024個(gè)引用。 (
3、6)緩存會(huì)被視為read/write(可讀/可寫)的緩存,意味著對(duì)象檢索不是共享的,而且可以安全地被調(diào)用者修改,而不干擾其他調(diào)用者或線程所做的潛在修改。Mybatis的緩存機(jī)制的緩存機(jī)制 u該更高級(jí)的配置創(chuàng)建了一個(gè)該更高級(jí)的配置創(chuàng)建了一個(gè)FIFO緩存,并每隔緩存,并每隔60秒刷新,存放結(jié)果對(duì)秒刷新,存放結(jié)果對(duì)象或列表的象或列表的512個(gè)引用,且返回的對(duì)象被認(rèn)為是只讀的,因此,在不同個(gè)引用,且返回的對(duì)象被認(rèn)為是只讀的,因此,在不同線程中的調(diào)用者之間修改它們會(huì)導(dǎo)致沖突。線程中的調(diào)用者之間修改它們會(huì)導(dǎo)致沖突。Mybatis的緩存機(jī)制的緩存機(jī)制屬性名稱屬性名稱描述描述eviction可用資源的回收策略
4、,主要包括以下幾種:LRU:較少使用的、移除最長時(shí)間不被使用的對(duì)象。 FIFO(先進(jìn)先出):按對(duì)象進(jìn)入緩存的順序?qū)⑵湟瞥?SOFT(軟引用):移除基于垃圾回收器狀態(tài)和軟引用規(guī)則的對(duì)象。 WEAK(弱引用):積極地移除基于垃圾收集器狀態(tài)和弱引用規(guī)則的對(duì)象。默認(rèn)為LRUflushInterval刷新間隔,可以被設(shè)置為任意的正整數(shù),它們代表一個(gè)合理的毫秒形式的時(shí)間段。默認(rèn)情況下不設(shè)置,即沒有刷新間隔,緩存僅在調(diào)用語句時(shí)刷新size引用數(shù)目,可以被設(shè)置為任意正整數(shù),要牢記緩存的對(duì)象數(shù)目和運(yùn)行環(huán)境的可用內(nèi)存資源數(shù)目。默認(rèn)值為1024readOnly只讀屬性可以被設(shè)置為true或false。只讀的緩存設(shè)
5、置會(huì)給所有調(diào)用者返回緩存對(duì)象的相同實(shí)例。因此這些對(duì)象不能被修改。此處提供了很重要的性能優(yōu)勢??勺x寫的緩存會(huì)返回緩存對(duì)象的拷貝(通過序列化)。這樣較為緩慢,但比較安全,因此默認(rèn)為false存儲(chǔ)過程的使用存儲(chǔ)過程的使用u存儲(chǔ)過程的優(yōu)點(diǎn):存儲(chǔ)過程的優(yōu)點(diǎn):(1)存儲(chǔ)過程只在創(chuàng)造時(shí)進(jìn)行編譯,以后每次執(zhí)行存儲(chǔ)過程都無須重新編譯,而一般SQL語句每執(zhí)行一次就編譯一次,所以使用存儲(chǔ)過程可提高數(shù)據(jù)庫執(zhí)行速度。(2)當(dāng)對(duì)數(shù)據(jù)庫進(jìn)行復(fù)雜操作時(shí)(如對(duì)多個(gè)表進(jìn)行Update、Insert、Query和Delete時(shí)),可將此復(fù)雜操作用存儲(chǔ)過程封裝起來,還可與數(shù)據(jù)庫提供的事務(wù)處理一同使用。(3)存儲(chǔ)過程可以重復(fù)使用,可減
6、少數(shù)據(jù)庫開發(fā)人員的工作量。(4)安全性高,可設(shè)定只有某些用戶才具有對(duì)指定存儲(chǔ)過程的使用權(quán)。在在Mybatis中使用存儲(chǔ)過程中使用存儲(chǔ)過程u在配置中添加如下語法格式:在配置中添加如下語法格式:n返回參數(shù) = Call 存儲(chǔ)過程名稱(參數(shù)1,參數(shù)2.)在在Mybatis中使用存儲(chǔ)過程中使用存儲(chǔ)過程u返回參數(shù):指在存儲(chǔ)過程中通過返回參數(shù):指在存儲(chǔ)過程中通過return返回的值。返回的值。u參數(shù)的完整格式為:參數(shù)的完整格式為: #參數(shù)名, mode=參數(shù)類型, jdbcType = JDBC類型, javaType = Java類型, resultMap = 結(jié)果映射 在在Mybatis中使用存儲(chǔ)過程
7、中使用存儲(chǔ)過程u步驟步驟(1)創(chuàng)建存儲(chǔ)過程(2)在映射SQL中配置存儲(chǔ)過程 (3)在MyBatis中調(diào)用存儲(chǔ)過程在在Mybatis中使用存儲(chǔ)過程中使用存儲(chǔ)過程u使用存儲(chǔ)使用存儲(chǔ)統(tǒng)計(jì)某用戶發(fā)表博客的總篇數(shù)統(tǒng)計(jì)某用戶發(fā)表博客的總篇數(shù)在在Mybatis中使用存儲(chǔ)過程中使用存儲(chǔ)過程(1)在)在SQL SERVER中創(chuàng)建如下存儲(chǔ)過程:中創(chuàng)建如下存儲(chǔ)過程:create procedure proc_getBlogCountByAuthor(username varchar(50),blogCount int output)asbegindeclare author_id int;select author
8、_id = ID from author where username = username;select blogCount = COUNT(ID) from blog where author_id = author_id;end;在在Mybatis中使用存儲(chǔ)過程中使用存儲(chǔ)過程(2) 在在BlogMapper.xml文件中添加如下配置信息:文件中添加如下配置信息:在在Mybatis中使用存儲(chǔ)過程中使用存儲(chǔ)過程u在在Mybatis中編寫中編寫Java代碼調(diào)用存儲(chǔ)過程,代碼如下:代碼調(diào)用存儲(chǔ)過程,代碼如下:public static void main(String args) SqlSess
9、ion sqlSession = MyBatisUtil.getSqlSessionFactory().openSession();/創(chuàng)建map類型參數(shù)Map params = new HashMap();params.put(username, 張偉杰);/調(diào)用存儲(chǔ)過程sqlSession.selectOne(getBlogCountByName,params);int count = (Integer)params.get(blogCount);System.out.println(count);注解配置注解配置uMyBatis 3構(gòu)建在基于全面且強(qiáng)大的構(gòu)建在基于全面且強(qiáng)大的Java配置配
10、置API上。該配置上。該配置API是是基于基于XML的的MyBatis配置的基礎(chǔ),也是新的基于注解配置的基礎(chǔ)。配置的基礎(chǔ),也是新的基于注解配置的基礎(chǔ)。u注解提供了一種簡單的方式來實(shí)現(xiàn)簡單映射語句,而不會(huì)引入大量注解提供了一種簡單的方式來實(shí)現(xiàn)簡單映射語句,而不會(huì)引入大量的開銷。的開銷。注解配置注解配置uMybatis中常用的注解中常用的注解注解注解目標(biāo)目標(biāo)對(duì)應(yīng)的對(duì)應(yīng)的XML標(biāo)簽標(biāo)簽CacheNamespace類CacheNamespaceRef類Results方法Result方法One方法Many 方法Insert Update Delete方法 InsertProviderUpdateProv
11、ider DeleteProvider SelectProvider方法 允許創(chuàng)建動(dòng)態(tài)SQLParam 參數(shù)N/AOptions 方法映射語句的屬性在在MyBatis中使用注解中使用注解/添加作者Insert(Insert into Author(username,password,email,address,phone) +values(#username,#password,#email,#address,#phone)Options(useGeneratedKeys=true,flushCache = false, timeout = 10000)public void addAutho
12、r(Author author);/刪除作者Delete(delete from author where id = #id)Options(flushCache = false, timeout = 10000)public void deleteAuthor(Param(id) int id);在在MyBatis中使用注解中使用注解/查詢所有作者信息查詢所有作者信息Select(select * from author)Options(flushCache = false, timeout = 10000,useCache=true)Results(value = Result(id=tr
13、ue,column=id,property=id),Result(property=username,column=username),Result(property=password,column=password),Result(property=email,column=email),Result(property=address,column=address),Result(property=phone,column=phone)public List findAuthors();在在MyBatis中使用注解中使用注解/查詢某作者信息Select(select * from autho
14、r where id = #id)Options(flushCache = false, timeout = 10000,useCache=true)Results(value = Result(id=true,column=id,property=id),Result(property=username,column=username),Result(property=password,column=password),Result(property=email,column=email),Result(property=address,column=address),Result(prop
15、erty=phone,column=phone)public Author findAuthorById(Param(id) int id);在在MyBatis中使用注解中使用注解uCacheNamespace(size = 512):定義在該命名空間內(nèi)允許使用內(nèi)置:定義在該命名空間內(nèi)允許使用內(nèi)置緩存緩存uOptions(useCache = true, flushCache = false, timeout = 10000):一些查詢的選項(xiàng)開關(guān)一些查詢的選項(xiàng)開關(guān)uParam(id):全局限定別名,定義查詢參數(shù)在:全局限定別名,定義查詢參數(shù)在sql語句中的位置不再語句中的位置不再是順序下標(biāo)是順
16、序下標(biāo)0,1,2,3.的形式,而是對(duì)應(yīng)名稱,該名稱在此處定義。的形式,而是對(duì)應(yīng)名稱,該名稱在此處定義。 uResults是以是以Result為元素的數(shù)組,為元素的數(shù)組,Result表示單條屬性表示單條屬性字段字段的映射關(guān)系,的映射關(guān)系,id = true表示該表示該id字段是主鍵,查詢時(shí)字段是主鍵,查詢時(shí)mybatis會(huì)給予必要會(huì)給予必要的優(yōu)化。數(shù)組中所有的的優(yōu)化。數(shù)組中所有的Result組成了單個(gè)記錄的映射關(guān)系,而組成了單個(gè)記錄的映射關(guān)系,而Results則是單個(gè)記錄的集合。另外,還有一個(gè)非常重要的注解則是單個(gè)記錄的集合。另外,還有一個(gè)非常重要的注解ResultMap,其與,其與Result
17、s類類似似uSelect(查詢語句查詢語句)、Insert(增加語句增加語句)、Update(更新語句更新語句)和和Delete(刪除語句刪除語句)表示對(duì)數(shù)據(jù)進(jìn)行查詢、添加、更新和刪除的操作。表示對(duì)數(shù)據(jù)進(jìn)行查詢、添加、更新和刪除的操作。在在MyBatis中使用注解中使用注解u測試注解的使用,實(shí)現(xiàn)數(shù)據(jù)的增加、刪除、修改和查詢。測試注解的使用,實(shí)現(xiàn)數(shù)據(jù)的增加、刪除、修改和查詢。在在MyBatis中使用注解中使用注解使用注解時(shí),如何動(dòng)態(tài)構(gòu)建SQL語句?在在MyBatis中使用注解中使用注解public class AuthorSqlBuilder extends SqlBuilder /返回修改的s
18、ql語句public String updateAuthorSql( ) BEGIN();UPDATE(author);SET(username = #username);SET(password = #password);SET(email = #email);SET(address = #address);SET(phone = #phone);WHERE(id = #id);return SQL( );UpdateProvider(type=AuthorSqlBuilder.class,method=updateAuthorSql)測試注解使用測試注解使用/獲取SqlSession工廠SqlSessionFactory factory = MyBatisUtil.getSqlSessionFactory();/注冊(cè)映射器接口注冊(cè)映射器接口factory.getConfiguration().addMapper(AuthorMapper.class);/獲取SqlSession對(duì)象SqlSession sqlSession = factory.openSession();/獲取映射器Author
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025中學(xué)教職工聘任合同范本
- 影視藝人簽約協(xié)議書
- 房屋地基下沉協(xié)議書
- 氣囊封堵合同協(xié)議書
- 景區(qū)資產(chǎn)交接協(xié)議書
- 月度運(yùn)營分析與總結(jié)計(jì)劃
- 陽臺(tái)草坪施工方案
- 社會(huì)實(shí)踐對(duì)幼兒園教學(xué)的影響計(jì)劃
- 救災(zāi)物品捐贈(zèng)協(xié)議書
- 教師兼職合同協(xié)議書
- 高效水泥助磨劑PPT課件(PPT 66頁)
- 藍(lán)色大氣商務(wù)商業(yè)計(jì)劃書PPT模板
- 生物防治第三講
- 旁站監(jiān)理實(shí)施細(xì)則(完整版)
- 學(xué)業(yè)水平考試復(fù)習(xí)高中語文文言文課本翻譯
- 蘇教版二年級(jí)(下冊(cè))科學(xué)全冊(cè)單元測試卷含期中期末(有答案)
- 常用原料凈料率參照表
- 高低溫試驗(yàn)報(bào)告
- 第一章 混凝土拌合站組織機(jī)構(gòu)框圖及崗位職責(zé)
- 指南預(yù)應(yīng)力簡支t形梁橋
- 湘教版八年級(jí)數(shù)學(xué)下冊(cè)第3章《圖形與坐標(biāo)》復(fù)習(xí)
評(píng)論
0/150
提交評(píng)論