




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第第5章章MyBatis高級特性高級特性本章內容本章內容uMybatis緩存緩存u使用存儲過程使用存儲過程u注解注解本章目標本章目標u理解理解Mybatis緩存原理緩存原理u掌握掌握Mybatis調用存儲過程調用存儲過程u了解了解Mybatis中的注解配置中的注解配置Mybatis的緩存機制的緩存機制u緩存技術是一種緩存技術是一種“以空間換時間以空間換時間”的設計理念,是利用的設計理念,是利用內存空間內存空間資源來提高數據檢索速度的有效手段之一。資源來提高數據檢索速度的有效手段之一。uMyBatis包含一個非常強大的查詢緩存特性,可以非常方便地配置和包含一個非常強大的查詢緩存特性,可以非常方便
2、地配置和定制。定制。nMyBatis默認沒有開啟緩存,除了局部的session緩存。要開啟二級緩存,需要在SQL映射文件中添加一行 。Mybatis的緩存機制的緩存機制u緩存作用緩存作用(1)映射語句文件中的所有select 語句將會被緩存。 (2)映射語句文件中的所有insert、update和delete語句會刷新緩存。 (3)緩存會使用Least Recently Used(LRU,最近最少使用的)算法收回。 (4)根據時間表(如no Flush Interval,沒有刷新間隔),緩存不會以任何時間順序來刷新。 (5)緩存會存儲列表集合或對象(無論查詢方法返回什么)的1024個引用。 (
3、6)緩存會被視為read/write(可讀/可寫)的緩存,意味著對象檢索不是共享的,而且可以安全地被調用者修改,而不干擾其他調用者或線程所做的潛在修改。Mybatis的緩存機制的緩存機制 u該更高級的配置創(chuàng)建了一個該更高級的配置創(chuàng)建了一個FIFO緩存,并每隔緩存,并每隔60秒刷新,存放結果對秒刷新,存放結果對象或列表的象或列表的512個引用,且返回的對象被認為是只讀的,因此,在不同個引用,且返回的對象被認為是只讀的,因此,在不同線程中的調用者之間修改它們會導致沖突。線程中的調用者之間修改它們會導致沖突。Mybatis的緩存機制的緩存機制屬性名稱屬性名稱描述描述eviction可用資源的回收策略
4、,主要包括以下幾種:LRU:較少使用的、移除最長時間不被使用的對象。 FIFO(先進先出):按對象進入緩存的順序將其移除。 SOFT(軟引用):移除基于垃圾回收器狀態(tài)和軟引用規(guī)則的對象。 WEAK(弱引用):積極地移除基于垃圾收集器狀態(tài)和弱引用規(guī)則的對象。默認為LRUflushInterval刷新間隔,可以被設置為任意的正整數,它們代表一個合理的毫秒形式的時間段。默認情況下不設置,即沒有刷新間隔,緩存僅在調用語句時刷新size引用數目,可以被設置為任意正整數,要牢記緩存的對象數目和運行環(huán)境的可用內存資源數目。默認值為1024readOnly只讀屬性可以被設置為true或false。只讀的緩存設
5、置會給所有調用者返回緩存對象的相同實例。因此這些對象不能被修改。此處提供了很重要的性能優(yōu)勢??勺x寫的緩存會返回緩存對象的拷貝(通過序列化)。這樣較為緩慢,但比較安全,因此默認為false存儲過程的使用存儲過程的使用u存儲過程的優(yōu)點:存儲過程的優(yōu)點:(1)存儲過程只在創(chuàng)造時進行編譯,以后每次執(zhí)行存儲過程都無須重新編譯,而一般SQL語句每執(zhí)行一次就編譯一次,所以使用存儲過程可提高數據庫執(zhí)行速度。(2)當對數據庫進行復雜操作時(如對多個表進行Update、Insert、Query和Delete時),可將此復雜操作用存儲過程封裝起來,還可與數據庫提供的事務處理一同使用。(3)存儲過程可以重復使用,可減
6、少數據庫開發(fā)人員的工作量。(4)安全性高,可設定只有某些用戶才具有對指定存儲過程的使用權。在在Mybatis中使用存儲過程中使用存儲過程u在配置中添加如下語法格式:在配置中添加如下語法格式:n返回參數 = Call 存儲過程名稱(參數1,參數2.)在在Mybatis中使用存儲過程中使用存儲過程u返回參數:指在存儲過程中通過返回參數:指在存儲過程中通過return返回的值。返回的值。u參數的完整格式為:參數的完整格式為: #參數名, mode=參數類型, jdbcType = JDBC類型, javaType = Java類型, resultMap = 結果映射 在在Mybatis中使用存儲過程
7、中使用存儲過程u步驟步驟(1)創(chuàng)建存儲過程(2)在映射SQL中配置存儲過程 (3)在MyBatis中調用存儲過程在在Mybatis中使用存儲過程中使用存儲過程u使用存儲使用存儲統計某用戶發(fā)表博客的總篇數統計某用戶發(fā)表博客的總篇數在在Mybatis中使用存儲過程中使用存儲過程(1)在)在SQL SERVER中創(chuàng)建如下存儲過程:中創(chuàng)建如下存儲過程: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中使用存儲過程中使用存儲過程(2) 在在BlogMapper.xml文件中添加如下配置信息:文件中添加如下配置信息:在在Mybatis中使用存儲過程中使用存儲過程u在在Mybatis中編寫中編寫Java代碼調用存儲過程,代碼如下:代碼調用存儲過程,代碼如下:public static void main(String args) SqlSess
9、ion sqlSession = MyBatisUtil.getSqlSessionFactory().openSession();/創(chuàng)建map類型參數Map params = new HashMap();params.put(username, 張偉杰);/調用存儲過程sqlSession.selectOne(getBlogCountByName,params);int count = (Integer)params.get(blogCount);System.out.println(count);注解配置注解配置uMyBatis 3構建在基于全面且強大的構建在基于全面且強大的Java配置配
10、置API上。該配置上。該配置API是是基于基于XML的的MyBatis配置的基礎,也是新的基于注解配置的基礎。配置的基礎,也是新的基于注解配置的基礎。u注解提供了一種簡單的方式來實現簡單映射語句,而不會引入大量注解提供了一種簡單的方式來實現簡單映射語句,而不會引入大量的開銷。的開銷。注解配置注解配置uMybatis中常用的注解中常用的注解注解注解目標目標對應的對應的XML標簽標簽CacheNamespace類CacheNamespaceRef類Results方法Result方法One方法Many 方法Insert Update Delete方法 InsertProviderUpdateProv
11、ider DeleteProvider SelectProvider方法 允許創(chuàng)建動態(tài)SQLParam 參數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):定義在該命名空間內允許使用內置:定義在該命名空間內允許使用內置緩存緩存uOptions(useCache = true, flushCache = false, timeout = 10000):一些查詢的選項開關一些查詢的選項開關uParam(id):全局限定別名,定義查詢參數在:全局限定別名,定義查詢參數在sql語句中的位置不再語句中的位置不再是順序下標是順
16、序下標0,1,2,3.的形式,而是對應名稱,該名稱在此處定義。的形式,而是對應名稱,該名稱在此處定義。 uResults是以是以Result為元素的數組,為元素的數組,Result表示單條屬性表示單條屬性字段字段的映射關系,的映射關系,id = true表示該表示該id字段是主鍵,查詢時字段是主鍵,查詢時mybatis會給予必要會給予必要的優(yōu)化。數組中所有的的優(yōu)化。數組中所有的Result組成了單個記錄的映射關系,而組成了單個記錄的映射關系,而Results則是單個記錄的集合。另外,還有一個非常重要的注解則是單個記錄的集合。另外,還有一個非常重要的注解ResultMap,其與,其與Result
17、s類類似似uSelect(查詢語句查詢語句)、Insert(增加語句增加語句)、Update(更新語句更新語句)和和Delete(刪除語句刪除語句)表示對數據進行查詢、添加、更新和刪除的操作。表示對數據進行查詢、添加、更新和刪除的操作。在在MyBatis中使用注解中使用注解u測試注解的使用,實現數據的增加、刪除、修改和查詢。測試注解的使用,實現數據的增加、刪除、修改和查詢。在在MyBatis中使用注解中使用注解使用注解時,如何動態(tài)構建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();/注冊映射器接口注冊映射器接口factory.getConfiguration().addMapper(AuthorMapper.class);/獲取SqlSession對象SqlSession sqlSession = factory.openSession();/獲取映射器Author
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年醫(yī)療健康行業(yè):智慧醫(yī)院建設與運營策略研究報告
- 2025年醫(yī)療健康產業(yè)數字化轉型與智能醫(yī)療應用報告
- 培訓學生朗誦體態(tài)
- 家庭親子教育實施策略
- 眾望教育初中化學課程體系
- 煤礦支護培訓課件
- 小班生活活動總結
- 口腔缺牙培訓
- 徐州中考菱形題目及答案
- 院前急救流程
- 基于MATLAB的控制系統仿真及應用-第5章-基于MATLABSimulink的控制系統建模與仿真課件
- 一二次深度融合成套柱上斷路器匯報課件
- 解凍記錄表(標準模版)
- 初中數學北師大八年級下冊(2023年修訂) 因式分解岷陽王冬雪提公因式法教學設計
- 金屬非金屬礦山安全規(guī)程
- 生活飲用水游離余氯方法驗證報告
- DB32∕T 186-2015 建筑消防設施檢測技術規(guī)程
- C-TPAT反恐知識培訓ppt課件
- 巡檢培訓課件.ppt
- 二代征信系統數據采集規(guī)范釋義
- 軸承基礎知識PPT通用課件
評論
0/150
提交評論