分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 代码编程

Hibernate缓存机制浅谈

发布时间:2023-09-06 01:18责任编辑:白小东关键词:缓存Hibernate

Hibernate缓存

对于一个成熟的项目而言,缓存是必不可少的数据存储策略。
在实际项目开发过程中,Hibernate是一个持久层框架,频繁访问物理数据库是一个高消耗、高延迟的操作。对服务器造成的压力比较大。所 以,需要缓存,来减轻数据库的压力,提高网站的访问速度和性能。比如,对于电商类的项目中商品、热销、推荐 等信息可以放在缓存中,提高访问速度、减轻服务器的压力。

1Hibernate的一级缓存(Session级缓存)

一级缓存是Session级别的缓存,它属于事务范围的缓存,该级缓存由hibernate管理,应用程序无需干预。

Hibernate的一级缓存由Session提供,只存在于Session的生命周期中,当应用程序调用Session接口的save(),update(),saveOrupDate(),get(),load()或者Query和Criteria实例的list(),iterate()等方法时,如果Session缓存中没有相应的对象,hibernate就会把对象加入到一级缓存中,当session关闭时,该Session所管理的一级缓存也会立即被清除;

1.get查询的测试

1>在同一个session里执行两次get查询,以出现的sql语句数量来判断是否有缓存效果。

如果sql语句出现两条,则没有出现缓存。如果只有一条sql语句则,Hibernate的一级缓存启用了。

public void testQuery(){ ???????Configuration configuration = new Configuration(); ???????Configuration configure = configuration.configure(); ???????SessionFactory sessionFactory = configure.buildSessionFactory(); ???????Session session = sessionFactory.openSession(); ???????Transaction transaction = session.beginTransaction(); ???????HotelBean hotel1 = session.get(HotelBean.class, 3); ???????HotelBean hotel2 = session.get(HotelBean.class, 3); ???????transaction.commit(); ???????session.close(); ???}


在控制台查看到显示的sql结果如下:

Hibernate: ????select ???????hotelbean0_.hotel_id as hotel_id1_0_0_, ???????hotelbean0_.hotel_name as hotel_na2_0_0_, ???????hotelbean0_.hotel_address as hotel_ad3_0_0_ ????from ???????hotel hotelbean0_ ????where ???????hotelbean0_.hotel_id=?Process finished with exit code 0

两次查询,第一次执行了get方法查询了数据库,产生了一条sql语句,第二次执行get方法时,由于在一级缓存中找到了该对象,因此不会查询数据库,不再发出sql语句。

session级缓存:默认缓存。
增加、修改、查询的时候,都有缓存的数据。

2Hibernate的二级缓存(SessionFactory级缓存)

二级缓存是SessionFactory级别的缓存,该级缓存可以进行配置和更改,并且可以动态加载和卸载,hibernate还为查询结果提供了一个查询缓存,它依赖于二级缓存;

Hibernate缓存机制浅谈

原文地址:http://www.cnblogs.com/hc20080925hq/p/7678122.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved