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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
不错!
[***.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
Python抓取哔哩哔哩up主信息:只要爬虫学的好,牢饭吃的早
2019-04-29
有个码龄5年的程序员跟我说:“他连wifi从来不用密码”
2019-04-29
领导让我整理上个季度的销售额,幸好我会Python数据分析,你猜我几点下班
2019-04-29
【Python爬虫实战】为何如此痴迷Python?还不是因为爱看小姐姐图
2019-04-29
零基础自学Python,你也可以实现经济独立!
2019-04-29