首页 > 代码库 > 【11.0】Hibernate缓存机制(一级和二级缓存)

【11.0】Hibernate缓存机制(一级和二级缓存)

1、  一级缓存,二级缓存,查询缓存;

2、  一级缓存又称为session缓存。生命周期相同。周期较短。事务级别的缓存。

get使用了一级缓存,用get查数据时,首先检查缓存中是否有该数据,如果有直接从缓存中取数据,如果没有再查询数据库,并且将数据放入缓存中。

load也支持一级缓存。load还支持lazy.当load从数据库中查询数据后,也会将数据放入缓存。

3、  unique/list查询不会去查看缓存,但是list查询的实体对象将会放入缓存中。

4、  iterate会执行查询id的操作,当查询对象时,会检查缓存中是否存在。如果存在则从缓存中取数据。Iterate查询出来的对象也会放入缓存。

5、  管理一级缓存:flush(),clear(),evict()

6、  二级缓存:sessionFactory ;进程级别的缓存。支持集群。

 

 

使用步骤:

a)       在hibernate.cfg.xml中开启二级缓存(默认开启)

b)    配置cache.provider_class

<!-- 使用二级缓存  3.x -->

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

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

<!-- 使用二级缓存   4.3-->

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

    <property name="cache.region.factory_class">

    org.hibernate.cache.ehcache.EhCacheRegionFactory</property>

c)       导入ehcache.jar

d)       将ehcache.xml放入src下(etc下找)

e)       在类中指定或在(hibernate.cfg.xml)指定

<hibernate-mapping>

    <class name="cn.siggy.pojo.Book" table="book" catalog="hibernate4">

       <cache usage="read-only"/>

        <id name="id" type="java.lang.Integer">

            <column name="id" />

            <generator class="identity" />

        </id>

        <property name="author" type="java.lang.String">

            <column name="author" />

        </property>

        <property name="name" type="java.lang.String">

            <column name="name" />

        </property>

        <property name="price" type="java.lang.Double">

            <column name="price" precision="22" scale="0" not-null="true" />

        </property>

        <property name="pubDate" type="java.sql.Timestamp">

            <column name="pubDate" length="19" />

        </property>

    </class>

  

</hibernate-mapping>

在配置文件中

   <class-cache usage="read-only" class="cn.siggy.pojo.Book"/>

f)        使用:

@Test

   public void testGet(){

      Session session = HibernateUtil.getSession();

      Transaction tx = session.beginTransaction();

      Book book = (Book)session.get(Book.class, 1);

      //发出sql语句取数据

      System.out.println(book.getName());

      HibernateUtil.closeSession();

      session = HibernateUtil.getSession();

      System.out.println("---------");

      book = (Book)session.get(Book.class, 1);

      System.out.println(book.getName());

      tx.commit();

      HibernateUtil.closeSession();

   }

7、  查询缓存:在二级缓存基础来的。

a)         在hibernate.cfg.xml中配置

<!-- 配置使用查询缓存 -->

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

b)         使用:

 

 

 说明:如果有不懂之处,请参考博文http://blog.csdn.net/an_2016/article/details/52088712

【11.0】Hibernate缓存机制(一级和二级缓存)