深入理解Mybatis一級(jí)緩存
客戶端向數(shù)據(jù)庫服務(wù)器發(fā)送同樣的sql查詢語句,如果每次都去訪問數(shù)據(jù)庫,會(huì)導(dǎo)致性能的降低。
那么怎么提高呢?
mybatis為我們提供了一級(jí)緩存的策略
在一個(gè)sqlSession開啟和關(guān)閉之間,sqlSession對(duì)象內(nèi)部(其實(shí)是Executor)會(huì)維護(hù)一個(gè)緩存的對(duì)象,當(dāng)查詢數(shù)據(jù)時(shí)候,先從緩存中尋找是否存在該條數(shù)據(jù),存在就直接取出來,不存在,向數(shù)據(jù)庫發(fā)送sql查詢, 然后將查詢后的數(shù)據(jù)存入緩存,和返回給程序。
這樣會(huì)存在一個(gè)問題:
如果在第一次和第二次查詢期間,有程序更改了要查訊的數(shù)據(jù)庫的數(shù)據(jù),就會(huì)引起讀取的數(shù)據(jù)是錯(cuò)誤的,也就是
臟讀,其實(shí)是mybatis在sqlSession執(zhí)行commit()方法后會(huì)清空這個(gè)緩存。第二次去查詢,依然會(huì)從數(shù)據(jù)庫中查詢.
也可以手動(dòng)調(diào)用sqlSession的clearCache()方法清除緩存
小例子:
@Test public void testCacheLever1() throws Exception{ SqlSession session = factory.openSession(); UserMapper mapper = session.getMapper(UserMapper.class); //第一次請(qǐng)求,查詢id為1的用戶 User user = mapper.findUserById(1); System.out.println(user); //更改數(shù)據(jù),會(huì)清空緩存 user.setUsername("yyyy"); mapper.updateUser(user); session.commit(); //第二次查詢會(huì)從緩存中找 User user2 = mapper.findUserById(1); System.out.println(user2); session.close(); }
問題:
如果sqlSession關(guān)閉了,緩存也就清空了。這怎么使用緩存來提高效率呢?
好了,下篇文章給大家介紹mybatis二級(jí)緩存。
以上所述是小編給大家介紹的Mybatis一級(jí)緩存,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
Java返回文件時(shí)為圖片或pdf等設(shè)置在線預(yù)覽或下載功能
這篇文章主要介紹了Java返回文件時(shí)為圖片或pdf等設(shè)置在線預(yù)覽或下載功能,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2024-01-01解決spring-data-jpa 事物中修改屬性自動(dòng)更新update問題
這篇文章主要介紹了解決spring-data-jpa 事物中修改屬性自動(dòng)更新update問題,具有很好的參考價(jià)值,希望對(duì)大家2021-08-08java使用泛型實(shí)現(xiàn)棧結(jié)構(gòu)示例分享
泛型是Java SE5.0的重要特性,使用泛型編程可以使代碼獲得最大的重用。由于在使用泛型時(shí)要指明泛型的具體類型,這樣就避免了類型轉(zhuǎn)換。本實(shí)例將使用泛型來實(shí)現(xiàn)一個(gè)棧結(jié)構(gòu),并對(duì)其進(jìn)行測(cè)試2014-03-03SpringBoot Mybatis動(dòng)態(tài)數(shù)據(jù)源切換方案實(shí)現(xiàn)過程
這篇文章主要介紹了SpringBoot+Mybatis實(shí)現(xiàn)動(dòng)態(tài)數(shù)據(jù)源切換方案過程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04hibernate中HQL如何調(diào)用自定義函數(shù)
這篇文章主要介紹了hibernate中HQL如何調(diào)用自定義函數(shù)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09