zoukankan      html  css  js  c++  java
  • hibernate 一级缓存,二级缓存,查询缓存

    1、一级缓存是session级的缓存,session结束即事务提交,session关闭,缓存清除。效果不大

       get方式:一个session内,第二次查询不连数据库。适用于一级缓存

       load方式:懒加载查询(查询时不执行sql,使用结果时才会执行sql),第二次查询不连数据库。适用于一级缓存

       createQuery(hql).list():查询了整个list,第一次调用list()时,执行sql。第二次查询时,又执行了sql,说明不使用一级缓存。也就是不使用二级缓存

       createQuery(hql).iterate():只查询了id,第一次调用iterate()时,执行sql,查询id(查询部分属性),当得到对象并且使用时,会出现查询整个实体语句。但第二个iterate()时,执行sql(不适用一级缓存),查询id(部分字段)   得到对象时不会产生语句,适用一级缓存。查询部分字段,返回object[]数组,不适用一级缓存。查询部分字段,封装成对象

    例如String sql = select new UserPoJo(u.id,u.name) from UserPoJo u;第二次同样执行了sql,也不适用一级缓存,缓存只认全部字段的对象。

       save:在一个session中,先新增save ,然后get 或者load   save方法也是使用一级缓存

        

    2、二级缓存是sessionFactory级别缓存。进程级缓存,工厂级缓存,可以被所有session共享。提升性能用

      主要是配置第三方厂家。有jar包,cache的策略文件(Eh..缓存),配置二级缓存厂商类,开启二级缓存,二级缓存属性,配置哪些类适用二级缓存,还需要类的属性(需要放到文件的最下面),例如只读。

    二级缓存可以管理,可以通过evict清空

    3、查询缓存

    查询缓存存储的是部分属性,也叫普通属性

    查询缓存 会存储实体对象的id

    查询缓存的生命周期不确定

    查询缓存也需要配置

      list():一个session中,第二次查询不执行sql,说明适用查询缓存。查询的是部分字段;两个session中,同样适用,说明查询缓存与session无关

  • 相关阅读:
    axios简单应用 和 fetch的简单应用
    mock数据----Json-Server的简单应用
    前端架构:MVC以及MVVM MVP介绍
    vue 路由之间的简单传参小记
    工具方法: jQuery.方法() $.extend (小计)
    JavaScript Object中的函数assign
    js中的this指向问题(小计)
    JS中的闭包(转自他处)
    一个页面里如果想获取图片两个地方用到我们怎模板
    fetch
  • 原文地址:https://www.cnblogs.com/beijingstruggle/p/6422179.html
Copyright © 2011-2022 走看看