分享web开发知识

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

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

hibernate的一级缓存

发布时间:2023-09-06 01:44责任编辑:胡小海关键词:缓存
Hibernate框架中共有两级缓存. Session级别的缓存是属于一级缓存,SessionFactory级别的缓存是二级缓存.

缓存:将数据库或硬盘中的数据,存入到内存中.当下次使用的时候可以从内存中获得,减少数据库访问次数.(优化)

1.什么是hibernate的一级缓存
在 Session 接口的实现中包含一系列的 Java 集合, 这些 Java 集合构成了 Session 缓存. 只要 Session 实例没有结束生命周期, 存放在它缓存中的对象也不会结束生命周期.

2.一级缓存:生命周期与session一致.

3.程序测试

@Test ???public void test1(){ ???????Session s = null; ???????Transaction tx = null; ???????try{ ???????????s = HibernateUtil.getSession(); ???????????tx = s.beginTransaction(); ???????????//发送查询语句,并且把查询出来的实体类对象存入Session的缓存之中。 ???????????实体类 c1 = s.get(实体类.class, 94); ???????????System.out.println(c1); ???????????//会先去Session的缓存之中去查找,如果有就直接拿出来用。 ???????????实体类 c2 = s.get(实体类.class, 94); ???????????System.out.println(c2); ???????????tx.commit(); ???????}catch(Exception e){ ???????????tx.rollback(); ???????}finally{ ???????????s.close(); ???????} ???}

4.快照机制

 ???@Test ???public void test2(){ ???????Session s = null; ???????Transaction tx = null; ???????try{ ???????????s = HibernateUtil.getSession(); ???????????tx = s.beginTransaction(); ???????????实体类 c1 = s.get(实体类.class, 94); ???????????System.out.println(c1);//输出客户级别是:VIP客户 ???????????c1.setCustLevel("普通客户");//修改客户的级别是:普通客户 ???????????System.out.println(c1);//输出客户级别:普通客户 ???????????tx.commit();//默认在此时执行快照机制。用缓存和快照进行比较,如果不一致,使用缓存同步数据库中的数据,同时刷新缓存和快照。 ???????}catch(Exception e){ ???????????tx.rollback(); ???????}finally{ ???????????s.close(); ???????} ???}.

当执行到 ???tx.commit(); ?默认在此时执行快照机制。用缓存和快照进行比较,如果不一致,使用缓存同步数据库中的数据,同时刷新缓存和快照。

hibernate的一级缓存

原文地址:http://blog.51cto.com/13579086/2083941

知识推荐

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