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查询缓存

hibernate查询缓存_在Hibernate中启用实体和查询缓存相关推荐

  1. 在Hibernate中启用实体和查询缓存

    1.简介 在我执行过的与性能相关的任务中,这就是其中之一. 令人担心的是,如果每次为特定实体调用相同的查询,并且表数据在特定的时隙内不易更改,则我们可以使用Hibernate缓存查询结果. 这意味着, ...

  2. mysql 查询过滤_在MySQL中,如何对查询结果进行条件过滤

    昨天和大家一起学习了在mysql中,如何分组查询统计,但是有时候也会遇到这样的一个问题,比如我在查询中,已经做了分组统计,但是我想对于这个结果进行条件过滤?应该如何处理呢? 我们一样用之前的员工表em ...

  3. java通过手机号查询联系人_在java中如何根据手机号查询号码归属地

    标签: 1.maven项目中配置 com.googlecode.libphonenumber geocoder 2.15 com.googlecode.libphonenumber libphonen ...

  4. sql查询禁用缓存_如何在SQL Server 2017中启用和禁用身份缓存

    sql查询禁用缓存 Every data warehouse developer is likely to appreciate the significance of having surrogat ...

  5. java中一级缓存二级缓存_[Java] hibernate 一级缓存和二级缓存

    缓存是介于应用程序和物理数据源之间,其作用是为了降低应用程序对物理数据源访问的频次,从而提高了应用的运行性能.缓存内的数据是对物理数据源中的数据的复制,应用程序在运行时从缓存读写数据,在特定的时刻或事 ...

  6. java hibernate的使用_《Hibernate快速开始 – 4 – 使用JAVA持久层 API (JPA)教程》

    章节目标 使用JPA EntityManagerFactory 使用注解提供映射信息 使用 JPA 接口 本教程可在 entitymanger/ 路径下下载 4.1. persistence.xml ...

  7. mysql怎么子查询_在mysql中如何进行子查询?

    在mysql中,子查询是指将一个查询语句嵌套在另一个查询语句中,可以在SELECT.UPDATE和 DELETE语句中配合WHERE子句进行实现,WHERE子句中语法格式为"WHERE (另 ...

  8. apex 查询_在 Apex 中使用合并统计查询

    SOQL 中的合并统计查询 在 SOQL 中,我们可以使用一系列函数来进行合并统计查询.它们的功能和标准 SQL 中的 SUM(),COUNT() 等函数类似. Apex 中使用合并统计查询 在 Ap ...

  9. java如何获取手机号码归属地_在java中如何根据手机号查询号码归属地

    在java中如何根据手机号查询号码归属地 1.maven项目中配置 com.googlecode.libphonenumber geocoder 2.15 com.googlecode.libphon ...

最新文章

  1. Linux06-服务、守护进程和systemd
  2. hadoop 2.0 详细配置教程
  3. mongoDB的常用语法
  4. Bicolored RBS
  5. TYVJ P1030 乳草的入侵 Label:跳马问题
  6. Realm Swift
  7. php网站怎么对接微信群,PHP对接微信公众平台消息接口开发流程教程
  8. pl2303hxa串口线驱动_Prolific PL2303 USB转串口线驱动
  9. iTunes安装不了怎么办(win7安装iTunes)..
  10. python excel 复制行_通过python复制excel行
  11. 【Python数据分析之pandas01】两个常用的数据结构
  12. durbin watson检验表_Durbin-Watson自相关检验应用问题探讨
  13. 第一节:基础概念介绍(黄老师)
  14. mysql实践周心得_实践周心得体会
  15. 关于微软鼠标和键盘中心安装报错1603的解决方法
  16. html js 在线预览 pdf word xls等
  17. JavaCV-学习笔记一
  18. 实验吧-天下武功唯快不破 Writeup
  19. tensorflow预定义经典卷积神经网络和数据集tf.keras.applications
  20. 网站首页设计、风格一致、色彩搭配、版面布局的技巧

热门文章

  1. YBTOJ:卖猪问题(网络流)
  2. 最大乘积(记忆化搜索)
  3. nssl1318-地铁重组【dp】
  4. AtCoder Beginner Contest 175总结
  5. 【匈牙利算法】指引(jzoj 2319)
  6. 三个好用的并发工具类
  7. JavaFX UI控件教程(七)之Checkbox
  8. HtmlParser提取网页中的纯文本信息
  9. Java提升篇-事务隔离级别和传播机制
  10. 参加双车项目的一些感触