zoukankan      html  css  js  c++  java
  • 第四讲 Hibernate 缓存管理

    缓存原理?

    将一些重要的、核心数据加载到内存中,存放起来;当应用程序需要访问该数据时,直接从内存中获取该数据;(从内存中获取数据,而不是从磁盘上读取数据)

     

    Hibernate中的缓存管理:

    Hibernate中缓存分为:一级缓存(Session缓存)、二级缓存(SessionFactory缓存)。

    一级缓存(Session缓存)由Hibernate自带。

    特点:

    1. 必须使用。

    2. session关闭的时候,缓存自动清空。

    3. 手动清除缓存。(clear()——清除所有session中的缓存;evict(Object obj)——清除指定的对象; flush() —— 刷新缓存)

     

    二级缓存(SessionFactory缓存)Hibernate提供支持的接口(外部缓存库)。

    特点:

    1. 所有用户可以共享数据。(跟具体的session对象无关)

    2. 消耗更多的内存资源。

    3. 查询速度变快、修改时(增、删、改)需要维护缓存和数据库。

     

    如何使用二级缓存(步骤)(EHCache缓存):

    1. 修改hibernate.cfg.xml配置文件。(指定缓存插件、启动二级缓存功能)

     

    <property name="cache.provider_class">
            org.hibernate.cache.EhCacheProvider
    </property>
    <property name="cache.use_second_level_cache">true</property>

     

    1. 在src目录下,创建EHCache缓存的配置文件(ehcache.xml)。

     

    2. 在*.hbm.xml配置文件中,添加<cache usage="read-write"/>。

     

     

     

    注意:

    清除二级缓存中的对象:
    //清除所有类型
    HibernateSessionFactory.getSessionFactory().evict(Emp.class);
    
    //清除指定对象
    HibernateSessionFactory.getSessionFactory().evict(Emp.class, 1);
    
    //清除集合中的所有对象
    HibernateSessionFactory.getSessionFactory().evictCollection("com.zuxia.entity.Dept.emps");
    时间到达时,自动清除对象:
    <defaultCache maxElementsInMemory="500" eternal="false"
    timeToIdleSeconds="时间" timeToLiveSeconds="时间" overflowToDisk="true" />
    当时间到达时,自动清除对象;eternal="false"必须为false才有效。
    HQL语句默认不会执行缓存查询:
    <property name="cache.use_query_cache">true</property>
    查询时,调用Query中setCacheable(true)方法进行缓存查询。
    注意:根据HQL查询语句,缓存对象。(两条语句相同时,才能执行查询缓存)

     

  • 相关阅读:
    安装Oracle时出现环境变量Path的值大于1023的解决办法
    JavaScript通过元素id和name直接获取元素的方法
    [转载]T-SQL(Oracle)语句查询执行顺序
    [转载]T-SQL(MSSQL)语句查询执行顺序
    HTML5权威指南 17.其他API
    HTML5权威指南 16.拖放API与通知API
    HTML5权威指南 15.获取地理位置信息
    HTML5权威指南 14.使用Web Workers处理线程
    HTML5权威指南 13.扩展的XMLHttpRequest API
    HTML5权威指南 12.WebRTC通信
  • 原文地址:https://www.cnblogs.com/lljj/p/Hibernate04.html
Copyright © 2011-2022 走看看