在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

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

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

相关文章

php的内置函数strrpos_php strrpos 字符串查找函数内部源码实现

此函数strrpos从字符串的末尾开始查找所需要查找的字符。其他内部实现和strpos差不多是一样的。/* {{{ proto int strrpos(string haystack, string needle [, int offset]) Finds position of last occurrence of a string within another string */PHP_FUNCTION(strrpos){…

MyBatis缓存与Apache Ignite的陷阱

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

pptp mysql 认证_CentOS6.5搭建PPTP+Freeradius整合***管理系统

1、搭建PPTP服务php一、安装yum源mysql[rootNode ~]# cd /etc/yum.repos.d[rootNode ~]# wget http://mirrors.163.com/.help/CentOS6-Base-163.repo[rootNode ~]# yum -y install epel-relaese或web[rootNode ~]# rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/epel/6/x86_6…

OAuth2.0详解

来源博客&#xff1a;http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html OAuth是一个关于授权&#xff08;authorization&#xff09;的开放网络标准&#xff0c;在全世界得到广泛应用&#xff0c;目前的版本是2.0版。本文对OAuth 2.0的设计思路和运行流程&#xff0c;做…

python创建方法draw_Python做图像处理(五)---ImageDraw综合应用实例:自制验证码...

前面几讲讲解了pillow库中两个最重要的模块&#xff0c;Image模块与ImageDraw模块&#xff0c;本讲小编将这两个模块综合应用起来&#xff0c;来制作一个随机自动生成验证码的程序。1.生成验证码程序的算法设计原理验证码通常用于网络&#xff0c;是网站为了防止恶意注册和网络…

java web mvc_构建Java Web应用程序时遵循MVC的三个步骤

java web mvc第1步 做 始终通过servlet / action bean处理URL&#xff08;POST表单&#xff0c;单击链接等&#xff09;&#xff0c;而不是通过JSP处理 为什么 ActionBeans&#xff08;无论某些框架调用那些类&#xff09;&#xff0c;而servlet很少是控制器 用于处理用户输入。…

unknown error mysql_mysql执行sql文件报错Error: Unknown storage engine‘InnoDB’的解决方法...

发现问题最近在工作中遇到一个问题&#xff0c;在运行了一个innoDB类型的sql文件&#xff0c;报了Error: Unknown storage engine InnoDB错误&#xff0c;网上查了很多方法&#xff0c;但是都没办法真正解决我的问题&#xff0c;后来解决了&#xff0c;在这里总结一下过程&…

JQuery 对表单进行初始化操作

提供一种如果前台页面标签比较多&#xff0c;如果挨个初始化的话可能会比较繁琐&#xff0c;这时候我们可以将后台传递的数据组装为json串&#xff0c;前台用jquery将代码初始化到表单中。 function loadData(jsonStr) {// alert(jsonStr.toString())var obj eval("(&qu…

Winform控件扩展

1.TextBox 增加水印 新增一个用户控件&#xff0c;将继承UserControl改为TextBox public partial class TextBoxEP : TextBox{public TextBoxEP(){InitializeComponent();}private const uint WT_Mark 0x1501;[DllImport("user32.dll", CharSet CharSet.Auto, SetL…

oracle 中大于等于_针对oracle安装参数调整方法

solaris针对oracle安装的shmmax参数调整方法安装数据库不能拘泥于联机文档&#xff0c;最近看到好几个跑oracle的sun主机上&#xff0c;都把和数据库内存使用相关的操作系统内核参数shmmax设置成4G&#xff0c;因为联机文档中“solaris系统上安装oracle”是这样写的。具体实施时…

带有JAX-WS和Spring的Web服务应用程序

1.简介 这是一个漫长的等待&#xff0c;但是我终于发布了一个关于使用Spring创建第一个基于SOAP的Web服务应用程序的教程。 JAX-WS &#xff08;用于XML Web服务的Java API&#xff09;是用于以XML格式创建Web服务的一组API&#xff0c;我们最常将其称为基于SOAP的Web服务 &…

mysql把一个字段加到另一张表中_mysql如何能把一个表中的某一字段下的数据加入另一个表中相同字段下,条件是两表中的某字段相同?...

1、创建表create table a (name varchar(20) not null,sex varchar(10));create table b (name varchar(20) not null,sex varchar(10));2、插入值insert into a values(john,male);insert into b values(john,male);insert into a values(kate,female);insert into b values(k…

jboss数据源配置

http://blog.csdn.net/clinique/article/details/7482670 最近项目相关的JBOSS配置开始&#xff0c;留下点什么 项目使用的是local-tx-datasource, 网上找了很多资料&#xff0c;都没有明确说明local-tx-datasource和xa-datasource的区别&#xff0c;而且中文的资料太少&#x…

创建虚拟环境和新建工程目录

一、创建虚拟环境 virtualenv -p python版本的路径.exe 虚拟环境名称 #新建虚拟环境 eg&#xff1a;virtualenv -p C:\Users\fanlala\AppData\Local\Programs\Python\Python35-32\python.exe article_spider #使用python3.5新建名为article_spider的虚拟环境。 新建完成虚…

python装饰器编程_Python编程中装饰器的使用示例解析

装饰函数和方法我们先定义两个简单的数学函数&#xff0c;一个用来计算平方和&#xff0c;一个用来计算平方差&#xff1a; # get square sumdef square_sum(a, b):return a**2 b**2# get square diffdef square_diff(a, b):return a**2 - b**2print(square_sum(3, 4))print(s…

mvvm 自动绑定_ZK的实际应用:MVVM –表单绑定

mvvm 自动绑定这是我们从头开始构建ZK应用程序的第二集。 上一篇文章介绍了使用MVVM将数据加载和呈现到表中。 在本文中&#xff0c;我们将向您介绍ZK MVVM的表单绑定。 目的 我们将构建一个“添加”功能&#xff0c;使我们能够将新条目保存到清单中。 单击“添加”时出现表格…

最短路和次短路问题,dijkstra算法

1 /* 2 *题目大意&#xff1a; 3 *在一个有向图中,求从s到t两个点之间的最短路和比最短路长1的次短路的条数之和; 4 * 5 *算法思想&#xff1a; 6 *用A*求第K短路,目测会超时,直接在dijkstra算法上求次短路; 7 *将dist数组开成二维的,即dist[v][2],第二维分别用于记录最短…

Java EE 8 MVC:使用bean参数

在上一篇文章中&#xff0c;我们看到了如何在MVC Controller中访问query &#xff0c; path和form参数 。 这篇文章展示了如何使用BeanParam批注将多个参数映射到一个对象。 让我们重用关于表单参数的文章中的简单HTML表单&#xff1a; <form action"submit" me…

用python验证猜想之类的例子_python练手好例子:验证哥德巴赫猜想

哥德巴赫猜想是一个谜&#xff0c;但十分适合用来作为编程练习涉及的几个问题&#xff1a;1、如何验证一个数是素数 def prime(n)一个整数n不能被2 到 n \sqrt{n}n​整除&#xff0c;则为素数2、产生N以内的素数列表本文中N取100&#xff0c;可以取更大3、对于大于6的偶数&…

oracle安装及卸载总结

>>>>> oracle安装&#xff08;卸载&#xff09;教程&#xff08;来自网络&#xff09;&#xff1a;链接: http://pan.baidu.com/s/1eSzSwZC 密码: g3qn oracle_win_64安装包&#xff08;官网下的&#xff09;&#xff1a;链接: http://pan.baidu.com/s/1nvBPzkt…