本帖最后由 鱼丸儿 于 2018-1-20 11:44 编辑

大家好,今天来记录讲解一下磕磕绊绊的hibernate5 的二级缓存配置,一条路摸到黑 
那么在这之前我们先了解一下hibernate的一级缓存和二级缓存分别是什么? 
说句通俗的话就是 一级缓存的信息只能在同一个session间传递,而二级缓存是不同的session间可以访问的,可以跨越Session存在,可以被多个Session所共享。需要第三方缓存框架的加持

那么什么数据适合放到二级缓存中呢? 
便是那些不经常改动又经常被访问的数据,比如省市信息等,前台页面经常查询而没必要每次都要去数据库查询!

那么有什么三方框架可以支持hibernate的二级缓存呢? 
EHCache: 可作为进程范围内的缓存,存放数据的物理介质可以是内存或硬盘,对Hibernate的查询缓存提供了支持 
OpenSymphony:可作为进程范围内的缓存,存放数据的物理介质可以是内存或硬盘,提供了丰富的缓存数据过期策略,对Hibernate的查询缓存提供了支持 
SwarmCache:可作为集群范围内的缓存,但不支持Hibernate的查询缓存 
JBossCache:可作为集群范围内的缓存,支持Hibernate的查询缓存

好,那么我们接下来就以EHCache来介绍一下hibernate二级缓存的用法

第一步:导入jar包(jar包附件给出)

[Java] 纯文本查看 复制代码
1
2
3
ehcache-core-2.4.3.jar 
hibernate-ehcache-5.0.7.Final.jar 
commons-logging-1.1.1.jar

第二步:声明缓存(在hibernate.cfg.xml 中配置)

[XML] 纯文本查看 复制代码
1
2
3
4
5
6
7
<!-- 使用二级缓存 --> 
<property name="hibernate.cache.use_second_level_cache">true</property
<!--设置缓存的类型,设置缓存的提供商 --> 
<property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory</property
<!--但是在 hibernate 4中设置缓存提供商时是这样设置的 
<property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>--> 
<property name="hibernate.cache.use_query_cache">true</property>

第三步:需要设置EHCache配置文件

[XML] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../config/ehcache.xsd" 
   
 <diskStore path="C:/ehcache"/><!-- 需要在你的磁盘里面添加该目录 --> 
         <defaultCache     
            maxElementsInMemory="10000"  
            eternal="false"   
            timeToIdleSeconds="120"  
            timeToLiveSeconds="120"  
            overflowToDisk="true"  
            maxElementsOnDisk="10000000"  
            diskExpiryThreadIntervalSeconds="120"   
            memoryStoreEvictionPolicy="LRU"    
            />   
</ehcache>

第四步:指定什么对象也就是model可以加入缓存 
有两种配置方式,可以在hbm中创建安,也可以在cfg文件中创建 
我们这里就以cfg文件配置为例

[XML] 纯文本查看 复制代码
1
2
3
4
<class-cache usage="read-write" class="cn.patronli.domain.Order"/> <!-缓存的是对象- 
<collection-cache usage="read-write" collection="cn.patronli.domain.Customer.orders"/> <!-缓存的是集合- 
   
为了保险起见 我们需要给相对应的model  实现一个序列化接口 implements Serializable

那么如何在hbm中设置呢?需要再class后紧跟缓存配置,如下所示

[XML] 纯文本查看 复制代码
1
2
<class name="Customer" table="t_customer" catalog="hibernateTest" lazy="true"
    <cache usage="read-write"/>

以上配置二选一 !!!!

那么最后我们就可以来进行测试了

[Java] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
public static void main(String[] args) {   
             
        Session s1 = HibernateUtils.openSession(); 
        s1.beginTransaction();   
        Customer c1 = (Customer) s1.get(Customer.class, 1); // 从数据库中加载数据   
        System.out.println(c1.getName()); 
        s1.getTransaction().commit();   
        s1.close(); // 关闭session级别的一级缓存   
     
        Session s2 = HibernateUtils.openSession(); 
        s2.beginTransaction();   
        Customer c2 = (Customer) s2.get(Customer.class, 1); // 因为有了二级缓存的存在,并不会去查询数据库可以debug  观察控制台打印 
        System.out.println(c2.getName());   
    }

不知道你学会了没有?

hibernate 5的二级缓存案例讲解的更多相关文章

  1. Hibernate的一级二级缓存机制配置与测试

    特别感谢http://www.cnblogs.com/xiaoluo501395377/p/3377604.html 在本篇随笔里将会分析一下hibernate的缓存机制,包括一级缓存(session ...

  2. hibernate 查询、二级缓存、连接池

    hibernate 查询.二级缓存.连接池 查询: 1) 主键查询 Dept dept =  (Dept) session.get(Dept.class, 12); Dept dept =  (Dep ...

  3. Hibernate中 一 二级缓存及查询缓存(1)

    最近趁有空学习了一下Hibernate的缓存,其包括一级缓存,二级缓存和查询缓存(有些是参照网络资源的): 一.一级缓存     一级缓存的生命周期和session的生命周期一致,当前sessioin ...

  4. Hibernate-ORM:16.Hibernate中的二级缓存Ehcache的配置

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 本篇博客讲述Hibernate中的二级缓存的配置,作者将使用的是ehcache缓存 一,目录 1.二级缓存的具 ...

  5. 具体解释Hibernate中的二级缓存

    1.前言 这篇博客再前几篇博客的基础上来解说一下.Hibernate中的二级缓存.二级缓存是属于SessionFactory级别的缓存机制. 第一级别的缓存是Session级别的缓存,是属于事务范围的 ...

  6. Hibernate+EhCache配置二级缓存

    步骤: 第一步:加入ehcache.jar 第二步: 在src目录下新建一个文件,名为:ehcache.xml 第三步:在hibernate配置文件的<session-factory>下配 ...

  7. Spring 整合 Hibernate 时启用二级缓存实例详解

    写在前面: 1. 本例使用 Hibernate3 + Spring3: 2. 本例的查询使用了 HibernateTemplate: 1. 导入 ehcache-x.x.x.jar 包: 2. 在 a ...

  8. Hibernate笔记④--一级二级缓存、N+1问题、saveorupdate、实例代码

    一级缓存及二级缓存 一级缓存也是Session 缓存     一个链接用户的多次查询使用缓存     跨用户 则无缓存     hibernate自带的 get和load都会填充并利用一级缓存 二级缓 ...

  9. Hibernate中 一 二级缓存及查询缓存(2)

    缓存:缓存是什么,解决什么问题?  位于速度相差较大的两种硬件/软件之间的,用于协调两者数据传输速度差异的结构,均可称之为缓存Cache.缓存目的:让数据更接近于应用程序,协调速度不匹配,使访问速度更 ...

随机推荐

  1. laravel belongsTo使用

    前提:订单表(order)和用户表(user) 表结构: order CREATE TABLE `order` ( `id` char(16) COLLATE utf8mb4_unicode_ci N ...

  2. CentOS7 搭建影梭服务器

    安装Python包管理工具 yum install python-setuptools && easy_install pip 安装Shadowsocks pip install sh ...

  3. How to install macOS Sierra on Skylake

    create usb installer sudo /Applications/Install\ macOS\ Sierra.app/contents/resources/createinstallm ...

  4. linux按时间查询日志

    在系统应用集中部署的时候,很多日志因为太多难以定位,获取某段时间的日志是对运维人员非常关键的事情. 一.sed查看某时间段到现在的系统日志: sed  -n  '/May 20 17/,$p'   / ...

  5. 学习 Spring (十七) Spring 对 AspectJ 的支持 (完结)

    Spring入门篇 学习笔记 @AspectJ 的风格类似纯 java 注解的普通 java 类 Spring 可以使用 AspectJ 来做切入点解析 AOP 的运行时仍旧是纯的 Spring AO ...

  6. reshape

    reshape 编辑 reshape是一种函数,函数可以重新调整矩阵的行数.列数.维数.在matlab命令窗口中键入doc reshape或help reshape即可获得该函数的帮助信息. B = ...

  7. Django实现Rbac权限管理

    权限管理 权限管理是根据不同的用户有相应的权限功能,通常用到的权限管理理念Rbac. Rbac 基于角色的权限访问控制(Role-Based Access Control)作为传统访问控制(自主访问, ...

  8. BZOJ2738矩阵乘法——整体二分+二维树状数组

    题目描述 给你一个N*N的矩阵,不用算矩阵乘法,但是每次询问一个子矩形的第K小数. 输入   第一行两个数N,Q,表示矩阵大小和询问组数:接下来N行N列一共N*N个数,表示这个矩阵:再接下来Q行每行5 ...

  9. POJ3013-Big Christmas Tree-最短路

    题意:给出一个图,每个节点都有权值,每条边也有费用.要求建立一颗树,使总花费最小.树上每连一条边的花费定义为孩子节点权值和×此边费用. 做法:分析可知,最终的答案为所有节点的权值×到根节点的距离.可以 ...

  10. 使用IDEA部署项目到远程服务器

    1.选择Tools -> Deployment -> Configuration... 2.配置连接信息,Linux服务器一般都选择SFTP 3.配置本地上传文件路径.远程上传文件路径 4 ...