• 十四、HIbernate缓存


    一、一级缓存

      简单来说,同一个session中,你重复去获取同一个对象,如果Hibernate,每次都发出sql语句去查,太麻烦了,于是它每次先去一级缓存中查,如果没有就发出sql语句去数据库中查,同时把查到的对象保存在一级缓存中。下次要用的时候,还是先去一级缓存中查,查到了,就不用再去数据库中查了。

      值得注意的是,一级缓存也叫session级缓存,同一个session是共享一个一级缓存的,当session关闭的时候,这个session里面的缓存也就清空了。

      一级缓存,Session级共享。 save,update,saveOrUpdate,load,get,list,iterate,lock这些方法都会将对象放在一级缓存中,一级缓存不能控制缓存的数量,所以要注意大批量操作数据时可能造成内存溢出;可以用evict,clear方法清除缓存中的内容。

    二、二级缓存

      一级缓存是默认存在的,二级缓存是默认不存在的

      要使用二级缓存必须要配置使用,配置好之后,Hibernate查询对象先去一级缓存中查,如果查不到再去二级缓存中查,如果再查不到再发出sql语句去数据库中查,同时将查询到的对象放入二级缓存中

      值得注意的是,二级缓存也叫sessionFactory级缓存,同一个sessionFactory是共享同一个sessionFactory的,当sessionFactory关闭的时候,这个sessionFactory里面的缓存也就清空了。

      二级缓存,sessionFactory级共享,是交给第三方去处理的。 

      配置方式(举例配置OSCache)

    1.引入jar包 链接:https://pan.baidu.com/s/1qYZaozy 密码:wjfn

    2.配置hibernate.cfg.xml

    <property name="cache.use_second_level_cache">true</property><!-- 启用二级缓存 -->
    <property name="cache.provider_class">org.hibernate.cache.OSCacheProvider</property><!-- 配置适配器类 -->

    3.配置要对哪个domain对象配置二级缓存

      3.1方法一,在hibernate.cfg.xml中配置

    <class-cache usage="read-only" class="com.myz.domain.Employee"/>

      3.2方法二,在Employee.hbm.xml中配置

    <hibernate-mapping package="com.myz.domain">
        <class name="Employee">
        <cache usage="read-only"/>
            <id name="id">
            <generator class="assigned"></generator>
            </id>
            
            <property name="name">
                <column name="name"></column>
            </property>
            
            <many-to-one name="dep" column="dep_id"></many-to-one>
        </class>
    </hibernate-mapping>

      3.3

      hibernate二级缓存策略

      ■ 只读缓存(read-only)

      ■ 读写缓存(read-write) [ 银行,财务软件]

      ■ 不严格读写缓存(nonstrict-read-write) [bbs 被浏览多少次]

      ■ 事务缓存(transactional)

      4.拷贝一个oscache.propertis配置文件,hibernate-3.2etcoscache.propertis目录下,

      5.统计信息打开generate_statistics,用sessionFactory.getSatistics()获取统计信息。

    <property name="hibernate.generate_statistics">true</property>
  • 相关阅读:
    ①---Java开发环境配置
    1.java的基础和数据类型
    0、原生jdbc工厂类
    spring中使用quartz动态添加定时任务执行sql
    app前端代码打包步骤
    less的解析笔记
    转:玩转HTML5移动页面(动效篇)
    HTML5属性备忘单
    玩转git和github
    js基础----数组
  • 原文地址:https://www.cnblogs.com/myz666/p/8447974.html
Copyright © 2020-2023  润新知