zoukankan      html  css  js  c++  java
  • Hibernate二级缓存

     1 @org.junit.Test
     2     public void testHibernateSecondLevelCache(){
     3         Employee employee=(Employee) session.get(Employee.class, 7499);
     4         System.out.println(employee.getName());
     5         
     6         transaction.commit();
     7         session.close();
     8         session = sessionFactory.openSession();
     9         transaction = session.beginTransaction();
    10         
    11         Employee employee2=(Employee) session.get(Employee.class, 7499);
    12         System.out.println(employee2.getName());
    13     }

    现在这 这段代码就是两个session。会发送两条sql语句。

    一:hibernate二级缓存应用

    1:加入jar包

    2:加入ehcache.xml

    <ehcache>
    
        <!-- Sets the path to the directory where cache .data files are created.
    
             If the path is a Java System Property it is replaced by
             its value in the running VM.
    
             The following properties are translated:
             user.home - User's home directory
             user.dir - User's current working directory
             java.io.tmpdir - Default temp file path -->
        <diskStore path="java.io.tmpdir"/>
    
    
        <!--Default Cache configuration. These will applied to caches programmatically created through
            the CacheManager.
    
            The following attributes are required for defaultCache:
    
            maxInMemory       - Sets the maximum number of objects that will be created in memory
            eternal           - Sets whether elements are eternal. If eternal,  timeouts are ignored and the element
                                is never expired.
            timeToIdleSeconds - Sets the time to idle for an element before it expires. Is only used
                                if the element is not eternal. Idle time is now - last accessed time
            timeToLiveSeconds - Sets the time to live for an element before it expires. Is only used
                                if the element is not eternal. TTL is now - creation time
            overflowToDisk    - Sets whether elements can overflow to disk when the in-memory cache
                                has reached the maxInMemory limit.
    
            -->
        <defaultCache
            maxElementsInMemory="10000"
            eternal="false"
            timeToIdleSeconds="120"
            timeToLiveSeconds="120"
            overflowToDisk="true"
            />
    
        <!--Predefined caches.  Add your cache configuration settings here.
            If you do not have a configuration for your cache a WARNING will be issued when the
            CacheManager starts
    
            The following attributes are required for defaultCache:
    
            name              - Sets the name of the cache. This is used to identify the cache. It must be unique.
            maxInMemory       - Sets the maximum number of objects that will be created in memory
            eternal           - Sets whether elements are eternal. If eternal,  timeouts are ignored and the element
                                is never expired.
            timeToIdleSeconds - Sets the time to idle for an element before it expires. Is only used
                                if the element is not eternal. Idle time is now - last accessed time
            timeToLiveSeconds - Sets the time to live for an element before it expires. Is only used
                                if the element is not eternal. TTL is now - creation time
            overflowToDisk    - Sets whether elements can overflow to disk when the in-memory cache
                                has reached the maxInMemory limit.
    
            -->
    
        <!-- Sample cache named sampleCache1
            This cache contains a maximum in memory of 10000 elements, and will expire
            an element if it is idle for more than 5 minutes and lives for more than
            10 minutes.
    
            If there are more than 10000 elements it will overflow to the
            disk cache, which in this configuration will go to wherever java.io.tmp is
            defined on your system. On a standard Linux system this will be /tmp"
            -->
        <cache name="sampleCache1"
            maxElementsInMemory="10000"
            eternal="false"
            timeToIdleSeconds="300"
            timeToLiveSeconds="600"
            overflowToDisk="true"
            />
    
        <!-- Sample cache named sampleCache2
            This cache contains 1000 elements. Elements will always be held in memory.
            They are not expired. -->
        <cache name="sampleCache2"
            maxElementsInMemory="1000"
            eternal="true"
            timeToIdleSeconds="0"
            timeToLiveSeconds="0"
            overflowToDisk="false"
            /> -->
    
        <!-- Place configuration for your caches following -->
    
    </ehcache>

    3:在hibernate.cfg.xml文件中配置需要缓存的配置。

    <!-- 配置启用hibernate的二级缓存 -->
            <property name="cache.use_second_level_cache">true</property>
            <!-- 配置hibernate二级缓存使用的产品 -->
            <property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property>
            <!-- 配置对哪些类使用 hibernate 的二级缓存  。在mapping的后面 -->
            <class-cache usage="read-write" class="com.hq.entities.Employee"/>

    或者在Employee的 hbm.xml文件中加上

    <cache usage="read-write"/>

    **:对集合进行二级缓存的配置:

         <class-cache usage="read-write" class="com.hq.entities.Employee"/>
            <class-cache usage="read-write" class="com.hq.entities.Department"/>
            <collection-cache usage="read-write" collection="com.hq.entities.Department.emps"/>
     

    或者在Department.hbm.xml和Employee.hbm.xml中加上

     <cache usage="read-write"/>

    然后在集合中加上cache

    <set name="emps" table="GG_EMP" inverse="true" lazy="true">
                <cache usage="read-write"/>
                <key>
                    <column name="DEPT_ID" />
                </key>
                <one-to-many class="com.hq.entities.Employee" />
            </set>

    ***.  查询缓存: 默认情况下, 设置的缓存对 HQL 及 QBC 查询时无效的, 但可以通过以下方式使其是有效的

    I.  在 hibernate 配置文件中声明开启查询缓存

    <property name="cache.use_query_cache">true</property>

    II. 调用 Query 或 Criteria 的 setCacheable(true) 方法

    III. 查询缓存依赖于二级缓存

  • 相关阅读:
    Kubernetes之(四)kubeadm部署集群
    Kubernetes之(三)核心组件ETCD介绍
    Kubernetes之(二)核⼼技术概念和API对象
    Kubetnetes之(一)基础介绍
    docker入门基础(六)
    docker入门基础(八)
    docker入门基础(七)
    docker入门基础(五)
    docker入门基础(四)
    docker入门基础(三)
  • 原文地址:https://www.cnblogs.com/bulrush/p/7881457.html
Copyright © 2011-2022 走看看