首页 > 系统服务 > 详细

hibernate的缓存

时间:2014-03-18 16:56:54      阅读:544      评论:0      收藏:0      [点我收藏+]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="dataSource">
           <ref bean="dataSource" />
        </property>
        <property name="hibernateProperties">
            <value>
                hibernate.show_sql=true
                hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
             hibernate.cache.use_query_cache=true
                hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider
             
            </value>
        </property>
         <property name="mappingResources">
            <list>
                <value>net/spring/bo/User.hbm.xml</value>
                <value>net/spring/bo/Address.hbm.xml</value>
                <value>net/spring/bo/ClassName.hbm.xml</value>
                <value>net/spring/bo/Student.hbm.xml</value>
            </list>
         </property>
     </bean>

 

众所周知hibernate有两级缓存,分别为session级别和sessionFactory级别。session级别缓存为一级缓存,只能一个线程用。在hibernate中默认是打开的,也就是我们无须打开。现在主要讨论hibernate的二级缓存,即sessionFactory级别缓存。

sessionFactory是默认关闭的。打开二级缓存需要在hibernate配置文件或者Spring(如果是配置了Spring框架)中打开。以applicationContext为例。

hibernate.cache.use_query_cache=true是打开二级缓存。 hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider为使用二级缓存的种类。hibernate二级缓存种类有好几种方法。

然后在bo类的配置文件中还需要 <cache usage="read-only"/> 只读缓存

然后再次两个不同的Session查询get或者load的时候只会出现一条sql语句。即可以证明是从缓存中查询出来。

hibernate的缓存默认的是智能根据Id查询。如果使用iterate则会出现N+1的问题。hibernate有查询缓存即 List it = s1.createQuery("From User u where u.id <10")
  .setCacheable(true)
  .list();

设置为true即可放入放入缓存中。但是如果查询条件变了查询缓存就不起作用。如果From User u where u.id <8。缓存就不起作用。

一般建议使用第三方缓存框架。

hibernate的缓存,布布扣,bubuko.com

hibernate的缓存

原文:http://www.cnblogs.com/miceal/p/3608012.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!