10分钟入门Hibernate的一级缓存
发布日期:2021-06-29 15:01:35 浏览次数:2 分类:技术文章

本文共 2227 字,大约阅读时间需要 7 分钟。

Hibernate的一级缓存

一、缓存的概念:

1、什么是缓存

缓存:是一种优化的方式,将一些数据存入到内存当中,使用的时候可以直接从缓存当中获取,不用通过存储源。

二、Hibernate的缓存

Hibernate的框架当提供了优化的手段:缓存、抓取策略。Hibernate当中提供了两种缓存机制:一级缓存,二级缓存。

1、Hibernate的一级缓存:

称为session级别的缓存、一级缓存的生命周期与session是一致的(一级缓存是由session当中的一系列的Java集合所构成的)。

一级缓存是自带的不可卸载。
Hibernate的二级缓存是SessionFactory级别的缓存,是需要配置的缓存

2、证明Hibernate的一级缓存的存在

(1)查询两次发送一次数据SQL语句—》一级缓存的存在

@Test	// 证明一级缓存的存在	public void demo01() {
Session session = HibernateUtils.openSession(); Transaction transaction = session.beginTransaction(); Customer customer1 = session.get(Customer.class, 1l);//发送SQL语句 System.out.println(customer1); Customer customer2 = session.get(Customer.class, 1l);//不发生SQL语句 System.out.println(customer2); System.out.println(customer1 == customer2); transaction.commit(); session.close(); }

(2)当前面使用过该对象的时候,其数据会放入到一级缓存当中,再次查询该对象的数据,不会发送SQL语句,会直接从一级缓存对应的对象当中去获取数据

@Test	// 证明一级缓存的存在	public void demo001() {
Session session = HibernateUtils.openSession(); Transaction transaction = session.beginTransaction(); Customer customer = new Customer(); customer.setCust_name("分解"); Serializable id = session.save(customer);//这里会发送插入的SQL语句 //这里不会发送SQL语句,因为之前session当中就有Customer对象,会直接从一级缓存当中回去对应对象的值 session.get(Customer.class, id); transaction.commit(); session.close(); }

三、Hibernate的一级缓存的内部结构

1、一级缓存中特殊的区域:快照区

在这里插入图片描述

2、一级缓存中的管理

没有清空的时候,发送一次SQL语句

public void demo03() {
Session session = HibernateUtils.openSession(); Transaction transaction = session.beginTransaction(); Customer customer1 = session.get(Customer.class, 1l);//发送SQL语句查询,同时将数据存放到一级缓存中和快照当中 Customer customer2 = session.get(Customer.class, 1l);//不发生SQL语句,会从缓存当中读取数据 transaction.commit(); session.close(); }

发送一次SQL语句

在这里插入图片描述

session.close或者session.clear的时候会将缓存当中的全部数据清空

session.evict(Object obj);//清除session当中对应对象的缓存

@Test	// 一级缓存的清空	public void demo03() {
Session session = HibernateUtils.openSession(); Transaction transaction = session.beginTransaction(); Customer customer1 = session.get(Customer.class, 1l);//发送SQL语句查询,同时将数据存放到一级缓存中和快照当中 session.clear();//清空缓存当中所有的数据, session.evict(customer1);//清除session当中单个对象的缓存 Customer customer2 = session.get(Customer.class, 1l);//发送SQL语句查询,同时将数据存放到一级缓存中和快照当中 transaction.commit(); session.close(); }

发送两次SQL语句

在这里插入图片描述

转载地址:https://code100.blog.csdn.net/article/details/105738779 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:10分钟解决Hibernate的事务管理,Hibernate当中要设置事务的隔离级别
下一篇:Hibernate持久化类编写的规则,主键生成策略,持久化类的三种状态,Hibernate持久化类的三种状态转换,Hibernate持久态对象特性

发表评论

最新留言

不错!
[***.144.177.141]2024年04月09日 03时42分02秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

MySQL 安装教程(无脑版) 2019-04-29
IDEA 怎么删除一个Module 2019-04-29
走进数据科学:最好是通过比网课更好的方法 2019-04-29
AI革命第一步:最容易被忽略但必不可少的物联网 2019-04-29
2020年开发运维工具清单:选择开发运维工具堆栈吧 2019-04-29
效率提升法则:高效人士不会去做的4件事 2019-04-29
8.PostgreSQL约束 2019-04-29
【技术分享】使用AES加密技术保障数据安全 2019-04-29
【应用实例】布线多?成本高?不可靠?泽耀方案没烦恼! 2019-04-29
数据可视化工具:Matplotlib绘图 2019-04-29
用Python写个超级小恐龙跑酷游戏,上班摸鱼我能玩一天 2019-04-29
闺蜜看我用Python画了一幅樱花图,吵着要我给他介绍程序员小哥哥 2019-04-29
【Python爬虫实战】知乎热榜数据采集,上班工作摸鱼两不误,知乎热门信息一网打尽 2019-04-29
自从我学会了数据挖掘Matplotlib、Numpy、Pandas、Ta-Lib等一系列库,我把领导开除了 2019-04-29
Python抓取哔哩哔哩up主信息:只要爬虫学的好,牢饭吃的早 2019-04-29
有个码龄5年的程序员跟我说:“他连wifi从来不用密码” 2019-04-29
领导让我整理上个季度的销售额,幸好我会Python数据分析,你猜我几点下班 2019-04-29
【Python爬虫实战】为何如此痴迷Python?还不是因为爱看小姐姐图 2019-04-29
零基础自学Python,你也可以实现经济独立! 2019-04-29
ElasticSearch与Mysql对比(ElasticSearch常用方法大全,持续更新) 2019-04-29