hibernate 简单笔记(三)
hibernate提供两类缓存:
- 一级缓存是session缓存,属于事务级缓存。hibernate不提供配置操作,但能够进行主动清除;
- 二级缓存是sessionFactory缓存,相当于把经常操作的数据缓存在内存中。之前的项目中利用了memcache和spring的AOP主动实现的,hibernate中也提供了这样的默认机制。见下面这个例子:
一.配置hibernate.cfg.xml:
<property name="cache.use_second_level_cache">true</property> <property name="cache.use_query_cache">true</property> <property name="cache.provider_class">org.hibernate.cache.OSCacheProvider</property> <property name="generate_statistics">true</property> <mapping resource="com/TBook.hbm.xml" /> <mapping resource="com/TOwner.hbm.xml" /> <class-cache usage="read-only" class="com.TOwner"/> //对TOwner的操作将使用二级缓存,缓存类型为只读
二.操作:
public static void queryTest(){ Configuration con = new Configuration(); con.configure(); SessionFactory sessionfactory = con.buildSessionFactory(); Session session = null; Transaction tran = null; for(int i = 0; i < 10; i++){ try{ session = sessionfactory.openSession(); tran= session.beginTransaction(); TOwner owner = (TOwner) session.get(TOwner.class, new Integer(1)); tran.commit(); }catch(RuntimeException e){ if(null != tran){tran.rollback();} }finally{ session.close(); } } Statistics stat = (Statistics) sessionfactory.getStatistics(); System.out.println("hit:"+stat.getSecondLevelCacheHitCount()); //显示为hit:9 System.out.println("put:"+stat.getSecondLevelCachePutCount()); //显示为put:1 System.out.println("miss:"+stat.getSecondLevelCacheMissCount());//显示为miss:1 } }
如上例可知,第一次操作get的时候缓存命中失败,因此put入缓存,之后的操作全部是查找缓存中的数据。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)