zoukankan      html  css  js  c++  java
  • 说说自己对hibernate一级、二级、查询、缓存的理解。

    说说自己对hibernate一级、二级、查询、缓存的理解。

     分类:

    今天面试碰到答不上来。。马上回家查了下,现在写下对hibernate缓存的理解以加深印象。

    1、一级缓存

    可以简单的理解为session缓存,即同一个session中使用get、load、迭代,会优先重缓存中取,如果没有则查询数据库并存入缓存,session关闭后缓存清空

    2、二级缓存

    可以直接理解为升级版,即sessionFactory 缓存,即只要使用的session是同一个sessionFactory创建的则可共用缓存,并且修改、删除、添加、会更新缓存。

    3、查询缓存

    也就是三级缓存(说三级缓存的很坑),我的理解就是query缓存,使用query.setCacheable(true) 即可开启查询缓存,查询缓存只缓存普通属性结果集,不缓存整个实体类结果集,以及实体类ID结果集,查询缓存是针对普通属性结果集的缓存对实体对象的结果集只缓存id,查询缓存在查询实体类时会首先到查询缓存中查询ID然后根据ID到一级或者二级缓存中查询实体类,没有则从数据库取,查询普通属性时也是优先从缓存中取。

      关闭二级缓存,开启查询缓存,调用query.list()会发出N条语句,因为查询缓存是根据ID到二级缓存中找的,没有则查找数据库,二级缓存和查询缓存同时开启则查询同样SQL语句时不会发出数据库请求,而是直接从缓存中取。

    备注:

    查询缓存只会query.list()起作用.

    session.find方法永远是从数据库中获取数据

    缓存通过map 使用ID作为KEY来缓存对象、一级和二级缓存只缓存对象

     
    1
  • 相关阅读:
    mysql随笔
    nodejs+websocket+egret
    mysql语法
    npm没反应的坑------windows配置nodejs
    nodejs打包模块问题
    nodejs中使用protobuf遇见的环境变量问题
    自己写的.net ORM 框架
    常用正则验证
    .NET中判断国内IP和国外IP
    位运算
  • 原文地址:https://www.cnblogs.com/w-wfy/p/6512143.html
Copyright © 2011-2022 走看看