zoukankan      html  css  js  c++  java
  • Hibernate <查询缓存>

    查询缓存:

      定义:查询缓存它是基于二级缓存的,可以保存普通属性查询的结果,查询对象实体时,他会保存id作为键,查询结果作为值,下个对象访问时,可以直接查到

          查询缓存查询实体对象时,显著的特点是,会执行多条查询id查询语句

      生命周期:当关联的表发生修改,查询缓存的生命周期结束

      查询缓存的配置和使用:

        1.修改hibernate.cfg   

    1 <!-- 开启查询缓存 默认为false -->
    2         <property name="hibernate.cache.use_query_cache">false</property>

        2.关联实体类跟二级缓存配置一样的

        3.在程序中启用:

          query.setCacheable(true);

      开启查询缓存,关闭二级查询的情况下:

     1 public void seleCacheTest(){
     2         try {
     3             session=HibernateUtil.currentSession();
     4             session.beginTransaction();
     5             List grade=session.createQuery("select g from Grade g")
     6                                 .setCacheable(true)
     7                                 .list();
     8             for(int i=0;i<grade.size();i++){
     9                 Grade grad=(Grade)grade.get(i);
    10                 System.out.println(grad.getGradename());
    11             }
    12             
    13         } catch (Exception e) {
    14             // TODO: handle exception
    15         }finally{
    16             HibernateUtil.closeSession();
    17             
    18         }
    19         System.out.println("-------------");
    20         try {
    21             session=HibernateUtil.currentSession();
    22             session.beginTransaction();
    23             List grade=session.createQuery("select g from Grade g")
    24                                 .setCacheable(true)
    25                                 .list();
    26             for(int i=0;i<grade.size();i++){
    27                 Grade grad=(Grade)grade.get(i);
    28                 System.out.println(grad.getGradename());
    29             }
    30             
    31         } catch (Exception e) {
    32             // TODO: handle exception
    33         }finally{
    34             HibernateUtil.closeSession();
    35             
    36         }
    37         
    38     }

        总结:

          itetator不支持查询缓存

          list 开启查询缓存时,关闭二级缓存:

             在不同session中:第二次查询时,会发出n条查询id

             同一session中时,由于一级缓存的作用:所以无论有没有开启查询缓存都只有一条查询语句  

          list开启查询缓存时,开启二级缓存时:

             只执行一条查询语句,因为二级缓存生效了

        在缓存知识点中需要注意的:

          缓存不能随便用,尽量不用!

          在使用缓存时,还需要考虑到脏数据的问题!

          各级缓存的特点:

            一级缓存,save,get,load,query时都会产生缓存,这是无法禁止的

            二级缓存,二级缓存跨session操作,性能比较好,但是不能查询普通属性

            查询缓存,以键值对方式存放缓存,必须在程序中创建

            

  • 相关阅读:
    Cocos2d-x优化中关于背景图片优化
    Cocos2d-x优化中纹理优化
    Cocos2d-x优化中图片优化
    Cocos开发中性能优化工具介绍之Visual Studio内存泄漏检测工具——Visual Leak Detector
    Cocos开发中性能优化工具介绍之使用Windows任务管理器
    Cocos开发中性能优化工具介绍之Xcode中Instruments工具使用
    spring03autowire属性
    spring02IOC
    css10定位属性
    css09浮动属性
  • 原文地址:https://www.cnblogs.com/gcs1995/p/4155720.html
Copyright © 2011-2022 走看看