hibernate查询缓存_在Hibernate中启用实体和查询缓存

hibernate查询缓存

1.简介

在我执行过的与性能相关的任务中,这就是其中之一。 令人担心的是,如果对于特定实体每次都调用相同的查询,并且表数据在特定的时隙内不易更改,则我们可以使用Hibernate缓存查询结果。 这意味着,如果我们需要ID为1234的Student的详细信息,则查询将仅针对第一个请求执行并访问数据库。 后续请求与查询缓存中的结果一起提供。 这对我们注意到的响应时间产生了很大的影响。 在执行此操作时,我们还担心缓存何时刷新。 我们将通过简单的配置轻松实现这一点,我们将对此进行探讨。

如果应用了查询缓存,则不会将任何后续SQL语句发送到数据库。 从查询缓存中检索查询结果,然后使用缓存的实体标识符访问第二级缓存。

2.实施

要启用查询缓存,以下是需要遵循的一组步骤–

  1. hibernate.cache.use_query_cache属性设置为true ,并确保启用了第二级缓存 。 单击此链接以了解二级缓存。
    <bean id="sessionFactory"class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"><property name="dataSource" ref="dataSource" /><property name="hibernateProperties"><props><prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop><prop key="hibernate.show_sql">true</prop><!-- Enable second level cache --><prop key="hibernate.cache.use_second_level_cache">true</prop><prop key="hibernate.cache.use_query_cache">true</prop><prop key="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</prop><prop key="net.sf.ehcache.configurationResourceName">/ehCache.xml</prop></props></property><property name="mappingResources"><list><value>User.hbm.xml</value></list></property>
    </bean>
  2. 完成后, org.hibernate.cache.internal.StandardQueryCache保存缓存的查询结果。
  3. 在ehCache配置文件中,添加以下代码段–
    <cache name="org.hibernate.cache.StandardQueryCache" maxElementsInMemory="10000" eternal="false" timeToLiveSeconds="86400" overflowToDisk="false" memoryStoreEvictionPolicy="LRU" />
  4. 查询缓存不会在缓存中缓存实际实体的状态。 它缓存标识符值和值类型的结果。 因此, 对于那些应作为查询结果缓存的一部分缓存的实体 ,请始终将查询缓存与第二级缓存结合使用 – https://docs.jboss.org/hibernate/orm/4.0/devguide/zh- US / html / ch06.html
  5. 要缓存第4点中指定的相关实体,我们需要将以下代码段添加到XML实体映射文件中,如下所示:
    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping><class name="Employee" table="EMPLOYEE"><cache usage="transactional" include="non-lazy" /><id name="id" type="int" column="ID"><generator class="native"/></id><property name="firstName" column="FNAME" type="string"/><property name="lastName" column="LNAME" type="string"/></class>
    </hibernate-mapping>

    上面的内容确保了实体的非惰性组件作为查询结果缓存的一部分被缓存。

  6. 涵盖了以上所有要点之后,最后一点是显式启用对单个查询的查询缓存,如下所示:
    Query query = session.createQuery("FROM EMPLOYEE");
    query.setCacheable(true);
    List users = query.list();

完成所有这些操作之后,也许您可​​以在调试模式下启动服务器并看到神奇的事情发生了!

翻译自: https://www.javacodegeeks.com/2016/04/enabling-entity-query-cache-hibernate.html

hibernate查询缓存

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/336378.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

iphone新旧手机数据传输已取消_如何取消iPhone手机App自动扣费?三种方法让你不再被“偷”...

一直以来苹果手机App这个自动续费真是让大家不胜其烦&#xff0c;钱虽然不多可总是平白无故这里十块&#xff0c;那里二十块的被扣也是不小的浪费&#xff0c;日常生活中为了追追剧、听听音乐、玩玩游戏难免会开通一些App会员而选择自动续费的话每月会费是有不错优惠的&#xf…

【TCP三次握手与四次挥手最强解析】

TCP连接拥塞控制四种方法总结&#xff08;详细简单&#xff0c;稳的一批&#xff09; TCP三次握手 作用&#xff1a;确认seqnumber&#xff1b;确定窗口大小以及最大报文大小 TCP四次挥手 WAIT_TIME状态到CLOSED需要2MSL时间&#xff08;最长单位MSL为2min,一般30s&#xff0…

oracle基础授权,Oracle基础学习3--Oracle创建用户并授权

Oracle服务器端的操作一般如下&#xff1a;1)安装Oracle服务器软件2) 创建数据库(安装时自动创建)3) 配置监听(安装时自动配置)4) 启动Oracle实例5) 创建用户表空间6) 创建新用户并授权下面就开始讲创建用户表空间、创建新用户并授权两项&#x…

mybatis缓存二级缓存_MyBatis缓存与Apache Ignite的陷阱

mybatis缓存二级缓存一周前&#xff0c;MyBatis和Apache ignite 宣布支持apache ignite作为MyBatis缓存&#xff08;L2缓存&#xff09;。 从技术上讲&#xff0c;MyBatis支持两个级别的缓存&#xff1a; 本地缓存&#xff0c;默认情况下始终启用 L2缓存&#xff0c;可选 随…

【H.264/AVC视频编解码技术】第一章【H264视频编码详细解析】

H264压缩比 YUV格式为 YUV420 分辨率 640 x 480 帧率 15 ,比特率为 640 x 480 x 1.5 x 15 x 8 =55M ,建议码流 500kpbs 。 压缩率 1 / 100 声网权威推荐码流 GOP 所谓GOP,意思是画面组,MPEG格中的帧序列,分为I、P、B三种,如排成IBBPBBPBBPBBPBBP...样式,这种…

企业是否应该实现对客户需求的快速响应_CRM系统给企业带来的创新有哪些?如何让销售爱用CRM系统?...

对于现代企业来说&#xff0c;CRM已然成为了一个成熟的项目&#xff0c;是能够给客户带来不菲的价值的。如果应用好&#xff0c;是能够取得提高客户满意度与企业经济效益的双赢成绩的。一、目前&#xff0c;CRM能够给企业带来的业务创新有哪些&#xff1f;1.统一数据CRM系统能将…

脚本实现oracle服务启停,通用服务启停shell脚本

####################################通用启停脚本#david###################################APP_NAMEmyApppsid0checkpid() {redisPidps -ef | grep $APP_NAME | grep -v grep | awk {print $2}if [[ -n "$myAppPid" ]]; thenpsid$myAppPidelsepsid0fi}status() {…

junit注释_通过此注释改善您的JUnit体验

junit注释JUnit可能是所有Java项目中90&#xff05;的一部分。 令人兴奋的是&#xff0c;我们很快将拥有支持Java 8的JUnit 5 。 我们最近在博客上发表了一项改进 。 回到JUnit 4领域&#xff0c;有一个小技巧&#xff0c;我只能建议您进行所有单元测试。 只需在此处添加这个小…

lagom的微服务框架_微服务有麻烦吗? Lagom在这里为您提供帮助。 试试吧!

lagom的微服务框架蛋糕支持。 我们很自豪地宣布&#xff0c;新的Apache许可的微服务框架Lagom可在GitHub上使用 &#xff01; 当其他框架专注于打包和实例启动时&#xff0c;Lagom重新定义了Java开发人员构建基于微服务的应用程序的方式。 服务是异步的。 服务内通信由您管理。…

oracle创建简单包,Oracle创建程序包是什么?

一、程序包的相关知识1。定义与说明a。 相关对象的封装b。 程序包的各部分- 程序包规格说明声明子程序- 程序包主体定义子程序2。使用程序包的优点- 模块化- 更轻松的应用程序设计- 信息隐藏- 新增功能- 性能更佳3。公有项和私有项的区别公有项&#xff1a;在程序包说明部分定义…

python离线安装包_Python2.7如何离线安装包

1 Python版本是2.7已经在CentOS7系统自带&#xff0c;没有pip&#xff0c;没有互联网环境&#xff0c;需要先安装 backports.ssl_match_hostname-3.4.0.2.tar.gz&#xff0c;直接再CentOS7系统运行以下命令&#xff1a; 解压tar文件 tar -xvf backports.ssl_match_hostname-3.4…

java ee api_Java EE安全性API向前发展

java ee apiJava EE安全API&#xff08; JSR 375 &#xff09;正在向前发展&#xff0c;正如Arjan Tijms在此处概述的那样 &#xff1a; http : //arjan-tijms.omnifaces.org/p/whats-new-in-java-ee-security-api-10 。 html 。 需要注意的一件事是&#xff0c;我们现在为参考…

【音视频安卓开发 (三)】OpenGL ES 直接绘制YUV

EGL OpenGL与窗口对应的的适配层&#xff0c;针对安卓平台的适配器。 surface 交互到窗口显示

上网登录窗不弹出_配置 Windows XP 正常上网(TLS HTTPS),连接到 NAS

Windows XP 是经典的、高效的、可靠的、性能良好的操作系统&#xff0c;然而其大部分版本都已在 2014 年停止支持。其较为流行的版本 SP2 与 SP3 由于各种原因&#xff0c;目前均不能直接正常访问安装了 SSL 证书的网站&#xff0c;或映射某些服务器提供的共享文件夹。本文将提…

oracle数据库集群日志,Oracle集群数据库中恢复归档日志

恢复归档日志&#xff1a;select * from v$log_history t where t.THREAD#恢复归档日志&#xff1a;select * from v$log_history t where t.THREAD#1order by t.FIRST_TIME desc实例1&#xff1a;恢复一个归档日志&#xff1a;run{allocate channel dev_0 type sbt_tapeparms …

jcmd 命令_jcmd:一个可以全部统治的JDK命令行工具

jcmd 命令我在过去的几篇文章中都引用了方便的JDK工具jcmd &#xff0c;但是像我以前对jps所做的那样&#xff0c;只专注于它的实用性 。 jcmd工具是随Oracle Java 7引入的&#xff0c;通过使用它来识别Java进程的ID &#xff08;与jps相似&#xff09;&#xff0c;获取堆转储 …

【流媒体FLV封装协议】

FLV封装格式介绍及解析 FLV封装格式 FLV(Flash Video)是Adobe公司推出的一种流媒体格式&#xff0c;由于其封装后的音视频文件体积小、封装简单等特点&#xff0c;非常适合于互联网上使用。目前主流的视频网站基本都支持FLV。采用FLV格式封装的文件后缀为.flv。 FLV封装格式…

python画统计图代码_Python使用统计函数绘制简单图形实例代码

前言 Matplotlib 是 Python 的绘图库。 它可与 NumPy 一起使用&#xff0c;提供了一种有效的 MatLab 开源替代方案。 它也可以和图形工具包一起使用&#xff0c;如 PyQt 和 wxPython。 用matplotlib绘制一些大家比较熟悉又经常混淆的统计图形&#xff0c;掌握这些统计图形可以对…

javafx css_JavaFX缺少的功能调查:CSS

javafx css在“ 缺少的功能调查”系列的最后一篇文章中&#xff0c;我说过这篇文章是关于CSS和FXML中缺少的功能。 现在事实证明&#xff0c;调查提交的内容不包含任何有效的FXML问题。 因此&#xff0c;我将仅关注CSS。 这些是报告CSS功能缺失&#xff1a; 完全CSS支持–当前…