• hibernate缓存


    get,load,list,iterator查询数据.

    把session级别的缓存成为一级缓存,sesssionfactory级别的缓存成为二级缓存。
    二级缓存默认是关闭状态 .

    get方法首先会去查询一级缓存,如果一级缓存中有数据,则不再发sql语句。如果一级缓存中没有查询到数据,则再去二级缓存中查询数据(二级缓存打开的情况),如果找不到,则
    发sql语句到数据库区查询。

    load方法首先会去查询一级缓存,如果一级缓存中有数据,则不再发sql语句。如果一级缓存中没有查询到数据,则再去二级缓存中查询数据(二级缓存打开的情况),如果找不到,则
    发sql语句到数据库区查询。

    list方法不会利用一级缓存和二级缓存。利用查询缓存.
    iterate方法在任何情况下首先会发一条查询所有对象主键的sql,然后根据每个主键去一级缓存和二级缓存中寻找数据,如果有此数据,则不再发sql语句,没有则再发sql语句查询每一个对象的详细信息。
    此种情况我们称为N+1问题。
    iterate方法会利用一级缓存和二级缓存,但不会利用查询缓存。


    二级缓存配置的步骤:
    1. 拷贝jar包:hibernate-release-4.2.4.Finalliboptionalehcache*.jarn
    2. 拷贝二级缓存的配置文件hibernate-release-4.2.4.Finalprojectetcehcache.xml到src下.
    <defaultCache
    <!-- 内存中可以缓存的最多对象的数量 -->
    maxElementsInMemory="10000"
    <!-- 是表示对象是否永远不失效,如果设为true,则以下两个属性失效 -->
    eternal="false"
    <!-- 对象在二级缓存中发呆的时间是120,如果120秒还没有人来访问此对象,那么此对象自动失效 -->
    timeToIdleSeconds="120"
    <!-- 表示对象存活的时间为120,如果用户使用此对象超过120秒,则自动解除关联,失效。 -->
    timeToLiveSeconds="120"
    <!-- 表示如果二级缓存存储满了,则是否向硬盘上存储,true表示多余的对象存放到硬盘上 -->
    overflowToDisk="true"
    />

    3.配置全局配置文件,开启二级缓存
    <property name="hibernate.cache.use_second_level_cache">true</property>
    <!-- 配置二级缓存的策略提供商 -->
    <property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property>

    4.需要在想放到二级缓存中的对象的映射文件中配置: <Cache usage="read-only"> 标签 配置在<Id>标签前面


    查询缓存: get,load 方法查出来的都是对象。如果我们希望查出来的部分属性想要缓存,那么这个缓存就是查询缓存.
    查询缓存缓存的都是属性。 也可以缓存对象。
    get,load是不会利用查询缓存的。

    利用查询缓存的步骤:
    1. 在全局配置文件中开启查询缓存 :
    <!-- 开启查询缓存 -->
    <property name="hibernate.cache.use_query_cache">true</property>

    2. 需要在查询的时候利用query.setCacheable(true) ;来指定结果集要放到查询缓存中

  • 相关阅读:
    竞赛入门经典 3.2竖式问题
    竞赛入门经典 3-4竖式
    hdu 3547 (polya定理 + 小高精)
    浅入 dancing links x(舞蹈链算法)
    计算阶乘的另一些有趣的算法(转载)
    莫比乌斯反演
    STL的常用用法、函数汇总(不定时更新)
    博弈论的总结
    14年安徽省赛数论题etc.
    CCF 第六次计算机职业认证 第四题 收货 stl动态存储和fleury算法的综合应用
  • 原文地址:https://www.cnblogs.com/hyl-home/p/7592892.html
Copyright © 2020-2023  润新知