码迷,mamicode.com
首页 > Web开发 > 详细

hibernate 一级缓存,二级缓存,查询缓存

时间:2017-02-21 00:58:28      阅读:158      评论:0      收藏:0      [点我收藏+]

标签:方法   厂商   返回   还需   部分   文件   还需要   一级缓存   工厂   

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无关

 

hibernate 一级缓存,二级缓存,查询缓存

标签:方法   厂商   返回   还需   部分   文件   还需要   一级缓存   工厂   

原文地址:http://www.cnblogs.com/beijingstruggle/p/6422179.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!