最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2016年05月24日 15:34:47   作者:孤傲蒼狼  
MyBatis緩存分為一級(jí)緩存和二級(jí)緩存一級(jí)緩存,本文給大家介紹mybatis緩存知識(shí),非常不錯(cuò)具有參考借鑒價(jià)值,感興趣的朋友一起學(xué)習(xí)吧

一、MyBatis緩存介紹

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

1.一級(jí)緩存:

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

2. 二級(jí)緩存:

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

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

1.1、Mybatis一級(jí)緩存測(cè)試

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
* 測(cè)試一級(jí)緩存
*/
public class TestOneLevelCache {
/*
* 一級(jí)緩存: 也就Session級(jí)的緩存(默認(rèn)開(kāi)啟)
*/
@Test
public void testCache() {
SqlSession session = MyBatisUtil.getSqlSession();
String statement = "me.gacl.mapping.userMapper.getUser";
User user = session.selectOne(statement, );
System.out.println(user);
/*
* 一級(jí)緩存默認(rèn)就會(huì)被使用
*/
user = session.selectOne(statement, );
System.out.println(user);
session.close();
/*
. 必須是同一個(gè)Session,如果session對(duì)象已經(jīng)close()過(guò)了就不可能用了 
*/
session = MyBatisUtil.getSqlSession();
user = session.selectOne(statement, );
System.out.println(user);
/*
. 查詢條件是一樣的
*/
user = session.selectOne(statement, );
System.out.println(user);
/*
. 沒(méi)有執(zhí)行過(guò)session.clearCache()清理緩存
*/
//session.clearCache(); 
user = session.selectOne(statement, );
System.out.println(user);
/*
. 沒(méi)有執(zhí)行過(guò)增刪改的操作(這些操作都會(huì)清理緩存)
*/
session.update("me.gacl.mapping.userMapper.updateUser",
new User(, "user", ));
user = session.selectOne(statement, );
System.out.println(user);
}
} 

1.2、Mybatis二級(jí)緩存測(cè)試

  1、開(kāi)啟二級(jí)緩存,在userMapper.xml文件中添加如下配置

<mapper namespace="me.gacl.mapping.userMapper">
<!-- 開(kāi)啟二級(jí)緩存 -->
<cache/> 

  2、測(cè)試二級(jí)緩存

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
* 測(cè)試二級(jí)緩存
*/
public class TestTwoLevelCache {
/*
* 測(cè)試二級(jí)緩存
* 使用兩個(gè)不同的SqlSession對(duì)象去執(zhí)行相同查詢條件的查詢,第二次查詢時(shí)不會(huì)再發(fā)送SQL語(yǔ)句,而是直接從緩存中取出數(shù)據(jù)
*/
@Test
public void testCache() {
String statement = "me.gacl.mapping.userMapper.getUser";
SqlSessionFactory factory = MyBatisUtil.getSqlSessionFactory();
//開(kāi)啟兩個(gè)不同的SqlSession
SqlSession session = factory.openSession();
SqlSession session = factory.openSession();
//使用二級(jí)緩存時(shí),User類必須實(shí)現(xiàn)一個(gè)Serializable接口===> User implements Serializable
User user = session.selectOne(statement, );
session.commit();//不懂為啥,這個(gè)地方一定要提交事務(wù)之后二級(jí)緩存才會(huì)起作用
System.out.println("user="+user);
//由于使用的是兩個(gè)不同的SqlSession對(duì)象,所以即使查詢條件相同,一級(jí)緩存也不會(huì)開(kāi)啟使用
user = session.selectOne(statement, );
//session.commit();
System.out.println("user="+user);
}
} 

1.3、二級(jí)緩存補(bǔ)充說(shuō)明

  1. 映射語(yǔ)句文件中的所有select語(yǔ)句將會(huì)被緩存。

  2. 映射語(yǔ)句文件中的所有insert,update和delete語(yǔ)句會(huì)刷新緩存。

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

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

  5. 緩存會(huì)存儲(chǔ)1024個(gè)對(duì)象

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

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

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

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

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

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

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

相關(guān)文章

  • Java異常跟蹤棧定義與用法示例

    Java異常跟蹤棧定義與用法示例

    這篇文章主要介紹了Java異常跟蹤棧定義與用法,結(jié)合具體實(shí)例形式分析了異常處理?xiàng)5母拍睢⒃砑跋嚓P(guān)使用技巧,需要的朋友可以參考下
    2018-05-05
  • SpringBoot整合Lombok的步驟詳解

    SpringBoot整合Lombok的步驟詳解

    在Java開(kāi)發(fā)中,我們經(jīng)常需要編寫大量的模板代碼,比如getter和setter方法、構(gòu)造函數(shù)、toString、equals和hashCode等,本文將詳細(xì)介紹如何在Spring Boot項(xiàng)目中整合Lombok,以及Lombok的一些常用注解,需要的朋友可以參考下
    2024-11-11
  • 微信支付java版本之Native付款

    微信支付java版本之Native付款

    這篇文章主要為大家詳細(xì)介紹了微信支付java版本之Native付款,感興趣的小伙伴們可以參考一下
    2016-08-08
  • elasticsearch節(jié)點(diǎn)間通信的基礎(chǔ)transport啟動(dòng)過(guò)程

    elasticsearch節(jié)點(diǎn)間通信的基礎(chǔ)transport啟動(dòng)過(guò)程

    這篇文章主要為大家介紹了elasticsearch節(jié)點(diǎn)間通信的基礎(chǔ)transport啟動(dòng)過(guò)程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-04-04
  • MyBatis中動(dòng)態(tài)SQL語(yǔ)句@Provider的用法

    MyBatis中動(dòng)態(tài)SQL語(yǔ)句@Provider的用法

    本文主要介紹了MyBatis中動(dòng)態(tài)SQL語(yǔ)句@Provider的用法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • 詳解springboot + profile(不同環(huán)境讀取不同配置)

    詳解springboot + profile(不同環(huán)境讀取不同配置)

    本篇文章主要介紹了springboot + profile(不同環(huán)境讀取不同配置),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • 淺談@Aspect@Order各個(gè)通知的執(zhí)行順序

    淺談@Aspect@Order各個(gè)通知的執(zhí)行順序

    這篇文章主要介紹了@Aspect@Order各個(gè)通知的執(zhí)行順序,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • 解決mybatis中的mapper命名問(wèn)題

    解決mybatis中的mapper命名問(wèn)題

    這篇文章主要介紹了解決mybatis中的mapper命名問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Java并發(fā)編程ArrayBlockingQueue的使用

    Java并發(fā)編程ArrayBlockingQueue的使用

    ArrayBlockingQueue是一個(gè)備受矚目的有界阻塞隊(duì)列,本文將全面深入地介紹ArrayBlockingQueue的內(nèi)部機(jī)制、使用場(chǎng)景以及最佳實(shí)踐,感興趣的可以了解一下
    2024-08-08
  • Spring Data JPA踩坑記錄(@id @GeneratedValue)

    Spring Data JPA踩坑記錄(@id @GeneratedValue)

    這篇文章主要介紹了Spring Data JPA踩坑記錄(@id @GeneratedValue),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07

最新評(píng)論

乌兰浩特市| 沾化县| 兴安盟| 比如县| 鸡西市| 东辽县| 吴桥县| 澳门| 五台县| 潜山县| 泉州市| 宝清县| 盘山县| 吐鲁番市| 丹东市| 温宿县| 综艺| 旺苍县| 永定县| 蕲春县| 乌拉特中旗| 通河县| 班戈县| 金华市| 阳山县| 唐海县| 濮阳市| 栾城县| 陆川县| 调兵山市| 金沙县| 三明市| 禄劝| 即墨市| 葵青区| 屏南县| 会同县| 抚宁县| 克山县| 临湘市| 奉节县|