文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
查询缓存
在前文中也提到了,我们的一级二级缓存都是对整个实体进行缓存,它不会缓存普通属性,如果想对普通属性进行缓存,则可以考虑使用查询缓存。
但需要注意的是,大部分情况下,查询缓存并不能提高应用程序的性能,甚至反而会降低应用性能,因此实际项目中要谨慎的使用查询缓存。
对于查询缓存来说,它缓存的 key 就是查询所用的 HQL 或者 SQL 语句,需要指出的是:查询缓存不仅要求所使用的 HQL、SQL 语句相同,甚至要求所传入的参数也相同,Hibernate 才能直接从缓存中取得数据。只有经常使用相同的查询语句、并且使用相同查询参数才能通过查询缓存获得好处,查询缓存的生命周期直到属性被修改了为止。
查询缓存默认是关闭。要想使用查询缓存,只需要在 hibernate.cfg.xml 中加入一条配置即可:
<property name="hibernate.cache.use_query_cache">true</property>
而且,我们在查询 hql 语句时,要想使用查询缓存,就需要在语句中设置这样一个方法: setCacheable(true)
。关于这个的 demo 我就不进行演示了,大家可以自己慢慢试着玩一下。
但需要注意的是,我们在开启查询缓存的时候,也应该开启二级缓存。因为如果不使用二级缓存,也有可能出现 N+1 的问题。
这是因为查询缓存缓存的仅仅是对象的 ID,所以首先会通过一条 SQL 将对象的 ID 都查询出来,但是当我们后面要得到每个对象的信息的时候,此时又会发送 SQL 语句,所以如果我们使用查询缓存,一定也要开启二级缓存。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论