一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務(wù)器之家 - 編程語言 - JAVA教程 - MyBatis學(xué)習(xí)教程(七)-Mybatis緩存介紹

MyBatis學(xué)習(xí)教程(七)-Mybatis緩存介紹

2020-05-04 14:46孤傲蒼狼 JAVA教程

MyBatis緩存分為一級緩存和二級緩存一級緩存,本文給大家介紹mybatis緩存知識,非常不錯具有參考借鑒價(jià)值,感興趣的朋友一起學(xué)習(xí)吧

一、MyBatis緩存介紹

  正如大多數(shù)持久層框架一樣,MyBatis 同樣提供了一級緩存和二級緩存的支持

1.一級緩存:

基于PerpetualCache 的 HashMap本地緩存,其存儲作用域?yàn)?Session,當(dāng) Session flush 或 close 之后,該Session中的所有 Cache 就將清空。 

2. 二級緩存:

二級緩存與一級緩存其機(jī)制相同,默認(rèn)也是采用 PerpetualCache,HashMap存儲,不同在于其存儲作用域?yàn)?Mapper(Namespace),并且可自定義存儲源,如 Ehcache。

3. 對于緩存數(shù)據(jù)更新機(jī)制,當(dāng)某一個(gè)作用域(一級緩存Session/二級緩存Namespaces)的進(jìn)行了 C/U/D 操作后,默認(rèn)該作用域下所有 select 中的緩存將被clear。

1.1、Mybatis一級緩存測試

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package me.gacl.test;
import me.gacl.domain.User;
import me.gacl.util.MyBatisUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
/**
* @author gacl
* 測試一級緩存
*/
public class TestOneLevelCache {
/*
* 一級緩存: 也就Session級的緩存(默認(rèn)開啟)
*/
@Test
public void testCache() {
SqlSession session = MyBatisUtil.getSqlSession();
String statement = "me.gacl.mapping.userMapper.getUser";
User user = session.selectOne(statement, );
System.out.println(user);
/*
* 一級緩存默認(rèn)就會被使用
*/
user = session.selectOne(statement, );
System.out.println(user);
session.close();
/*
. 必須是同一個(gè)Session,如果session對象已經(jīng)close()過了就不可能用了
*/
session = MyBatisUtil.getSqlSession();
user = session.selectOne(statement, );
System.out.println(user);
/*
. 查詢條件是一樣的
*/
user = session.selectOne(statement, );
System.out.println(user);
/*
. 沒有執(zhí)行過session.clearCache()清理緩存
*/
//session.clearCache();
user = session.selectOne(statement, );
System.out.println(user);
/*
. 沒有執(zhí)行過增刪改的操作(這些操作都會清理緩存)
*/
session.update("me.gacl.mapping.userMapper.updateUser",
new User(, "user", ));
user = session.selectOne(statement, );
System.out.println(user);
}
}

1.2、Mybatis二級緩存測試

  1、開啟二級緩存,在userMapper.xml文件中添加如下配置

?
1
2
3
<mapper namespace="me.gacl.mapping.userMapper">
<!-- 開啟二級緩存 -->
<cache/>

  2、測試二級緩存

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package me.gacl.test;
import me.gacl.domain.User;
import me.gacl.util.MyBatisUtil;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.junit.Test;
/**
* @author gacl
* 測試二級緩存
*/
public class TestTwoLevelCache {
/*
* 測試二級緩存
* 使用兩個(gè)不同的SqlSession對象去執(zhí)行相同查詢條件的查詢,第二次查詢時(shí)不會再發(fā)送SQL語句,而是直接從緩存中取出數(shù)據(jù)
*/
@Test
public void testCache() {
String statement = "me.gacl.mapping.userMapper.getUser";
SqlSessionFactory factory = MyBatisUtil.getSqlSessionFactory();
//開啟兩個(gè)不同的SqlSession
SqlSession session = factory.openSession();
SqlSession session = factory.openSession();
//使用二級緩存時(shí),User類必須實(shí)現(xiàn)一個(gè)Serializable接口===> User implements Serializable
User user = session.selectOne(statement, );
session.commit();//不懂為啥,這個(gè)地方一定要提交事務(wù)之后二級緩存才會起作用
System.out.println("user="+user);
//由于使用的是兩個(gè)不同的SqlSession對象,所以即使查詢條件相同,一級緩存也不會開啟使用
user = session.selectOne(statement, );
//session.commit();
System.out.println("user="+user);
}
}

1.3、二級緩存補(bǔ)充說明

  1. 映射語句文件中的所有select語句將會被緩存。

  2. 映射語句文件中的所有insert,update和delete語句會刷新緩存。

  3. 緩存會使用Least Recently Used(LRU,最近最少使用的)算法來收回。

  4. 緩存會根據(jù)指定的時(shí)間間隔來刷新。

  5. 緩存會存儲1024個(gè)對象

cache標(biāo)簽常用屬性:

?
1
2
3
4
5
<cache
eviction="FIFO" <!--回收策略為先進(jìn)先出-->
flushInterval="60000" <!--自動刷新時(shí)間60s-->
size="512" <!--最多緩存512個(gè)引用對象-->
readOnly="true"/> <!--只讀-->

給大家補(bǔ)充點(diǎn)知識:

和hibernate一樣,mybatis也有緩存機(jī)制

一級緩存是基于 PerpetualCache(mybatis自帶)的 HashMap 本地緩存,作用范圍為session,所以當(dāng)session commit或close后,緩存就會被清空

二級緩存默認(rèn)也是基于 PerpetualCache,但是可以為其制定存儲源,比如ehcache

一級緩存緩存的是SQL語句,而二級緩存緩存的是結(jié)果對象,看如下例子(mybatis的日志級別設(shè)為debug)

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 蜜柚精彩在线观看 | www日本高清视频 | 91免费精品国自产拍在线不卡 | 天天干天天操天天碰 | 亚洲国产精品嫩草影院久久 | 男人疯狂进女人下部视频动漫 | 国产性视频 | 99热精品成人免费观看 | 欧美性欲 | 乳色吐息讲的是什么 | 天天狠天天透天干天天怕处 | 欧美xbxbxbxb大片 | 国产精品亚洲片在线不卡 | 息与子中文字幕在线 | 99久久香蕉国产综合影院 | 图片专区小说专区卡通动漫 | 久久午夜一区二区 | 5g996未满十八 | 爱操综合 | 日韩欧美三级视频 | 国产成人高清精品免费观看 | 久久婷婷五月综合色精品首页 | 日韩经典在线观看 | 臀控福利大臀的网站 | 久久青草费线频观看国产 | 男人的视频网站 | 99爱在线精品视频免费观看9 | 亚洲高清毛片一区二区 | 日你逼 | 青青青青在线视频 | 校花被拖到野外伦小说 | 91久久夜色精品国产九色 | 亚洲国产一区 | 免费看国产一级特黄aa大片 | 久久五月综合婷婷中文云霸高清 | 人人做人人爽人人爱 | 欧美gayxxxx| 火影忍者小南裸羞羞漫画 | 99久久免费精品视频 | 日韩一级片在线播放 | 91香蕉小视频 |