Hibernate一级缓存详解
Hibernate是一款全自动ORM框架,它会在应用程序访问数据时,自动生成SQL语句并执行,因此开发人员不需要自己编写SQL语句,但这也造成它无法像MyBatis一样,能够直接从SQL层面严格控制其执行性能以及对数据库的访问频率,所以很容易出现性能不佳的情况。
为此,Hibernate提供了多种性能优化手段(例如HQL、懒加载策略、抓取策略以及缓存机制),其中缓存机制是Hibernate重要的优化手段之一,它可以有效地减少应用程序对数据库的访问的次数,提高应用程序的运行性能。缓存
缓存是位于应用程序和永久性数据存储源(例如硬盘上的文件或者数据库)之间,用于临时存放备份数据的内存区域,通过它可以降低应用程序读写永久性数据存储源的次数,提高应用程序的运行性能。
注:永久性数据存储源一般包括两种,数据库和硬盘上的文件,它们都可以永久的保存数据,但本教程中的永久性数据库存储源则是特指数据库,因此在后面的教程中,我们将使用数据库来代替永久性数据存储源的书法,特此说明。缓存具有以下特点:
缓存中的数据通常是数据库中数据的备份,两者中存放的数据完全一致,因此应用程序运行时,可以直接读写缓存中的数据,而不再对数据库进行访问,可以有效地降低应用程序对数据库的访问频率。
缓存的物理介质通常是内存,永久性数据存储源的物理介质为硬盘或磁盘,而应用程序读取内存的速度要明显高于硬盘,因此使用缓存能够有效的提高数据读写的速度,提高应用程序的性能。
由于应用程序可以修改(即写)缓存中的数据,为了保证缓存和数据库中的数据保持一致,应用程序通常会在在某些特定时刻,将缓存中的数据同步更新到数据库中。
Hibernate也提供了缓存机制,当查询数据时,首先Hibernate会到缓存中查找,如果找到就直接使用,找不到时才从永久性数据存储源(通常指的是数据库)中检索,因此,把频繁使用的数据加载到缓存中,可以减少应用程序对数据库的访问频次,使应用程序的运行性能得以提升。
Hibernate提供了两种缓存机制:一级缓存和二级缓存。下面,我们就对一级缓存进行介绍。
Hibernate一级缓存
Hibernate一级缓存是Session级别的缓存,它是由Hibernate管理的,不可卸载。
Hibernate一级缓存是由Session接口实现中的一系列Java集合构成的,其生命周期与Session保持一致。
Hibernate一级缓存中存放的数据是数据库中数据的备份,在数据库中数据以数据库记录的形式保存,而在Hibernate一级缓存中数据是以对象的形式存放的。
当使用Hibernate查询对象时,会首先从一级缓存中查找,若在一级缓存中找到了匹配的对象,则直接取出并使用;若没有在一级缓存中找到匹配的对象,则去数据库中查询对应的数据,并将查询到的数据添加到一级缓存中。由此可见,Hibernate的一级缓存机制能够在Session范围内,有效的减少对数据库的访问次数,优化Hibernate的性能。
一旦对象被存入一级缓存中,除非用户手动清除,不然只要Session实例的生命周期没有结束,存放在其中的对象就会一直存在。当Session关闭时,Session的生命周期结束,该Session所管理的一级缓存也会立即被清除;
一级缓存的特点
Hibernate一级缓存具有以下特点:
一级缓存是Hibernate自带的,默认是开启状态,无法卸载。
Hibernate一级缓存中只能保存持久态对象。
Hibernate一级缓存的生命周期与Session保持一致,且一级缓存是Session独享的,每个Session不能访问其他的Session的缓存区,Session一旦关闭或销毁,一级缓存中的所有对象将全部丢失。
当通过Session接口提供的save()、update()、saveOrUpdate()和lock()等方法,对对象进行持久化操作时,该对象会被添加到一级缓存中。
当通过Session接口提供的get()、load()方法,以及Query接口提供的getResultList、list()和iterator()方法,查询某个对象时,会首先判断缓存中是否存在该对象,如果存在,则直接取出来使用,而不再查询数据库;反之,则去数据库查询数据,并将查询结果添加到缓存中。
当调用Session的close()方法时,Session缓存会被清空。
一级缓存中的持久化对象具有自动更新数据库能力。
一级缓存是由Hibernate维护的,用户不能随意操作缓存内容,但用户可以通过Hibernate提供的方法,来管理一级缓存中的内容,如下表。
返回值类型
方法
描述
void
clear()
该方法用于清空一级缓存中的所有对象。
void
evict(Objectvar1)
该方法用于清除一级缓存中某一个对象。
void
flush()throwsHibernateException
该方法用于刷出缓存,使数据库与一级缓存中的数据保持一致。
开课吧广场人才学习交流平台
新氧Q2财报净利润同比增145。2,深入产业链强化非手术竞争北京时间2021年9月10日,国内领先的互联网医美医疗服务平台新氧科技(NASDAQ:SY)发布截至2021年6月30日第二季度未经审计财务业绩。财报显示,2021年第二……
雷军给大家一个小惊喜小米CC9全系降价最近手机圈还是非常热闹的,尤其是针对手机快充这一块,很多人的想法不一样。其实在问快充之前,笔者就曾有个老话题问过大家,续航到底与快充有没有关系?插曲:快充!很多人说10W……
南昌矿机开启智能运维,点亮商业新模式当智能制造风起云涌,新一轮悄无硝烟的数字变革点燃了矿山机械产业转型升级引擎。矿山机械已经由价格竞争逐渐演变成为研发竞争,矿山机械设备正在向大型化、数字化、智能化、生态化进阶发展……
中国第二季度GDP增长7。9,零售额超出预期中国国家统计局周四公布,二季度国内生产总值(gdp)较上年同期增长7。9。略低于此前预测的8。16月份零售额较上年同期增长12。1,高于市场预计的11的水平。工业产……
中核二四与中联重科签署战略合作协议6月9日,中国核工业二四建设有限公司(以下简称中核二四)与中联重科股份有限公司(以下简称中联重科)在湖南长沙签署战略合作协议。中核二四党委书记、董事长高宏树与中联重科董事长、C……
烤面筋爷爷神似袁隆平视频加载中。。。今天看到一则消息说,有人在公园夜市的烧烤摊上,看到一位酷似袁隆平爷爷的人,在卖烤面筋。老人笑的时候,简直和袁爷爷神相似。同样的笑容,同样的亲切,带给我们同……
人民来论摆脱充电焦虑,新能源汽车才能健康发展来源:人民网观点频道原创稿2021年国庆假期,驾驶新能源车自驾旅行成为新现象。然而当排队四小时,充电一小时的尴尬成为了广大车主的梦魇,破解新能源汽车的续航焦虑、充电焦虑显……
华为诺亚亿级中文多模态数据集悟空CVPRSketchDL研讨李亚洲的Newsletter今日推荐:华为诺亚发布亿级中文多模态数据集悟空、为北京公安局人工智能安全研究中心推个AI人才的招聘、CVPR2022SketchDLworks……
另辟蹊径!微软Win11取消对安卓支持,华为自己开发鸿蒙PC微软发布新一代Windows11系统最大的特点就是支持原生安卓APP应用。目前,微软也为测试人员提供了Beta渠道。然而,根据最新消息,微软最近别无选择,只能宣布:暂时取消安卓……
个人开始入门跨境电商1、选择平台:亚马逊、速卖通、eBay、Lazada、Shopee等。2、平台入驻3、用户定位4、产品选择5、店铺运营和管理6、仓储和物流7……
洗碗机究竟实用不实用?1,结论:实用。2,什么原理:70度高温水流冲刷配合洗碗盐洗碗块,有效去除油渍,排水后还能用余温烘干,并有风扇排出水汽。3,有几种类型:按照安装安装方式分台上式和嵌……
物联网云平台还有机会吗?不做设备端?有机会,但是建议不要做泛和大,从垂直领域出发比较好,为啥这样说呢?原因如下。1、各大运营商、互联网公司、设备制造商等等企业都在做综合性的平台。国内有阿里、华为、三大……