- 浏览: 458187 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
飞天奔月:
我来个简单点的代码 使用 LinkedHashSetpubli ...
ArrayList去重 -
飞天奔月:
public static <T> List< ...
ArrayList去重 -
aaron7524:
事务隔离级别 -
月陨殇:
wlh269 写道rswh110 写道lz内容写的不错,就是略 ...
事务隔离级别 -
lnx1824:
我的更奇怪,在本地静态的可以,放jetty里的页面后就不然,都 ...
JS得到上传图片尺寸
一级缓存生命周期很短,它session的生命周期一致,一级缓存也叫session级的缓存,也称事务级缓存
哪些方法支持一级缓存?
*load
*get
*iterate查询实体对象支持一级缓存,查询普通属性则不支持
一级缓存是缓存实体对象的
一级缓存如何管理?
* session.clear(),session.evict(对象名)
如何避免一次性打批量的实体数据插入后内存溢出
* 先flush,再clear
如果在现实工作中,遇到了大规模的数据,建议使用jdbc导入或数据库特定工具导入
哪些方法支持一级缓存?
*load
*get
*iterate查询实体对象支持一级缓存,查询普通属性则不支持
一级缓存是缓存实体对象的
一级缓存如何管理?
* session.clear(),session.evict(对象名)
如何避免一次性打批量的实体数据插入后内存溢出
* 先flush,再clear
如果在现实工作中,遇到了大规模的数据,建议使用jdbc导入或数据库特定工具导入
/** * 测试一级缓存 * @author Administrator * */ public class CacheLevel1Test extends TestCase { /** * 发出两次load查询 */ public void testCache1() { Session session = null; try { session = HibernateUtils.getSession(); session.beginTransaction(); Student student = (Student)session.load(Student.class, 1); System.out.println("student.name=" + student.getName()); //不会发出sql,因为load使用一级缓存 student = (Student)session.load(Student.class, 1); System.out.println("student.name=" + student.getName()); session.getTransaction().commit(); }catch(Exception e) { e.printStackTrace(); session.getTransaction().rollback(); }finally { HibernateUtils.closeSession(session); } } /** * 发出两次get查询 */ public void testCache2() { Session session = null; try { session = HibernateUtils.getSession(); session.beginTransaction(); Student student = (Student)session.get(Student.class, 1); System.out.println("student.name=" + student.getName()); //不会发出sql,因为get使用一级缓存 student = (Student)session.get(Student.class, 1); System.out.println("student.name=" + student.getName()); session.getTransaction().commit(); }catch(Exception e) { e.printStackTrace(); session.getTransaction().rollback(); }finally { HibernateUtils.closeSession(session); } } /** * 发出两次Iterate查询实体对象 */ public void testCache3() { Session session = null; try { session = HibernateUtils.getSession(); session.beginTransaction(); Student student = (Student)session.createQuery("from Student s where s.id=1").iterate().next(); System.out.println("student.name=" + student.getName()); //会发出查询id列表的sql,不会发出查询实体对象的sql,因为Iterate是使用缓存的 student = (Student)session.createQuery("from Student s where s.id=1").iterate().next(); System.out.println("student.name=" + student.getName()); session.getTransaction().commit(); }catch(Exception e) { e.printStackTrace(); session.getTransaction().rollback(); }finally { HibernateUtils.closeSession(session); } } /** * 发出两次Iterate查询普通属性 */ public void testCache4() { Session session = null; try { session = HibernateUtils.getSession(); session.beginTransaction(); String name = (String)session.createQuery("select s.name from Student s where s.id=1").iterate().next(); System.out.println("student.name=" + name); //Iterate查询普通属性,一级缓存不会缓存,所以会发出sql //一级缓存是实体对象的 name = (String)session.createQuery("select s.name from Student s where s.id=1").iterate().next(); System.out.println("student.name=" + name); session.getTransaction().commit(); }catch(Exception e) { e.printStackTrace(); session.getTransaction().rollback(); }finally { HibernateUtils.closeSession(session); } } /** * 打开两个session,分别调用load */ public void testCache5() { Session session = null; try { session = HibernateUtils.getSession(); session.beginTransaction(); Student student = (Student)session.load(Student.class, 1); System.out.println("student.name=" + student.getName()); session.getTransaction().commit(); }catch(Exception e) { e.printStackTrace(); session.getTransaction().rollback(); }finally { HibernateUtils.closeSession(session); } try { session = HibernateUtils.getSession(); session.beginTransaction(); //会发出sql,session间的数据是不能共享的 //因为一级缓存会盘随session的生命周期存在和消亡 Student student = (Student)session.load(Student.class, 1); System.out.println("student.name=" + student.getName()); session.getTransaction().commit(); }catch(Exception e) { e.printStackTrace(); session.getTransaction().rollback(); }finally { HibernateUtils.closeSession(session); } } /** * 先执行save,再调用load加载save后的数据 */ public void testCache6() { Session session = null; try { session = HibernateUtils.getSession(); session.beginTransaction(); Student student = new Student(); student.setName("李四"); java.io.Serializable id = session.save(student); //不会发出sql,因为save是使用缓存的 student = (Student)session.load(Student.class, id); System.out.println("student.name=" + student.getName()); session.getTransaction().commit(); }catch(Exception e) { e.printStackTrace(); session.getTransaction().rollback(); }finally { HibernateUtils.closeSession(session); } } /** * 缓存的管理,执行session.clear或session.evict方法,再调用load */ public void testCache7() { Session session = null; try { session = HibernateUtils.getSession(); session.beginTransaction(); Student student = (Student)session.load(Student.class, 1); System.out.println("student.name=" + student.getName()); //管理一级缓存,一级缓存是无法取消的,但可以管理,session.clear和session.evict //session.clear(); session.evict(student); //会发出sql,因为一级缓存中的实体对象被清除了 student = (Student)session.load(Student.class, 1); System.out.println("student.name=" + student.getName()); session.getTransaction().commit(); }catch(Exception e) { e.printStackTrace(); session.getTransaction().rollback(); }finally { HibernateUtils.closeSession(session); } } /** * 向数据库中批量插入1000条数据 */ public void testCache8() { Session session = null; try { session = HibernateUtils.getSession(); session.beginTransaction(); for (int i=0; i<1000; i++) { Student s = new Student(); s.setName("s_" + i); session.save(s); if (i % 20 == 0) { session.flush(); session.clear(); } } session.getTransaction().commit(); }catch(Exception e) { e.printStackTrace(); session.getTransaction().rollback(); }finally { HibernateUtils.closeSession(session); } } }
发表评论
-
java开发实战视频详解
2017-07-02 08:09 519java开发实战视频详解 链接: http://pan.bai ... -
什么样的数据适合存放到第二级缓存中
2009-04-11 17:15 1714(一)Hibernate的二级缓存策略的一般过程如下: 1) ... -
hibernate二级缓存攻略
2009-04-10 18:13 975http://www.iteye.com/topic/1890 ... -
关于hibernate缓存的问题
2009-04-10 18:12 10421. 关于hibernate缓 ... -
get方法和load方法区别
2009-04-03 18:38 1380hibernate中get方法和load方法的根本区别在于:如 ... -
Hibernate性能调优(重点理解)
2009-03-02 12:48 1265一。 inverse = ? inv ... -
hibernate查询缓存
2009-03-02 11:17 3763hibernate查询缓存 查询缓存是缓存普通属性结果集 ... -
浅谈hibernate性能优化的几点建议
2009-02-21 11:15 1003浅谈hibernate性能优化的几点建议 1、针对orac ... -
Hibernate抓取策略
2009-02-17 12:37 1359hibernate抓取策略(单端代理的批量抓取) 保持< ... -
Hibernate二级缓存的使用
2009-02-17 12:22 10421.加入ehcase.xml文件; 2.在配置文件中加入如下代 ... -
HQL (十) 统计查询
2009-02-02 18:28 2347统计查询(重要) 参见:StatQueryTest.java ... -
HQL (九) 连接查询
2009-02-02 18:25 6119连接查询(重要) * 内连接 * 外连接(左连接/右连接) ... -
HQL (八) 对象导航查询
2009-02-02 13:17 2112对象导航查询,在hql中采用.进行导航(重要) 参见:Obj ... -
HQL (七) 分页查询
2009-02-02 13:05 1198分页查询(重要) * setFirstResult(),数据 ... -
HQL (六) 查询过滤器
2009-02-02 12:22 1854查询过滤器 设置了查 ... -
HQL (五) 外置命名查询(sql语句单独保存起来)
2009-02-02 12:04 2301外置命名查询 * 在要查询对象对应的映射文件(这里是stud ... -
HQL (四) 原生sql查询
2009-02-02 11:27 1862hibernate也支持直接sql进行查询 参见:SqlQu ... -
HQL (三) 条件查询
2009-02-02 11:13 2584条件查询(重要) * 可以采用拼字符串的方式传递参数 * ... -
HQL (二) 实体对象查询
2009-02-02 11:05 1565实体对象查询(重要) * N+1问题,在默认情况下 ... -
HQL (一) 简单属性查询
2009-02-02 01:13 1925简单属性查询(重要) * 单一属性查询,返回结果集是属性列表 ...
相关推荐
**hibernate一级缓存详解** 在Java的持久化框架Hibernate中,一级缓存是其核心特性之一,它为提高数据库操作效率、减少对数据库的访问提供了重要支持。一级缓存,也称为session缓存,是每个Hibernate Session内部...
**hibernate一级缓存、二级缓存和查询缓存** 在Java的持久化框架Hibernate中,缓存机制是提高应用程序性能的关键要素。缓存能够减少数据库的访问次数,提高数据读取速度,并且在一定程度上降低了系统的负载。本文将...
标题“Hibernate一级缓存和二级缓存”指的是Hibernate框架中的两种缓存机制,它们是提高数据访问性能的关键要素。一级缓存是Session级别的,而二级缓存是SessionFactory级别的,两者在数据库操作中起到了重要的作用...
它是一个事务范围的缓存,也就是说,每个 Hibernate Session 对应一个一级缓存,仅在当前事务中有效。一级缓存主要存储了 Session 在当前事务中加载和修改的对象实例。当 Session 执行 CRUD 操作时,对象会自动放入...
本文将深入探讨Hibernate的一级缓存、二级缓存以及查询缓存,通过具体的实例来阐述它们的工作原理和使用方法。 首先,我们从一级缓存开始。一级缓存是Hibernate默认提供的缓存,它是每个Session级别的,也被称为...
Hibernate 一级缓存和二级缓存的区别
在 Hibernate 中,一级缓存是默认开启的一种缓存机制,对于提高应用程序性能有着重要作用。一级缓存位于 Session 对象中,是每个 Session 的私有缓存,它存储了从数据库中读取的对象实例。 一级缓存的工作原理: 1....
这显示了Hibernate一级缓存如何提高性能,避免重复的数据库访问。 总结起来,Hibernate的一级缓存是一个关键特性,它提高了数据访问的效率并降低了数据库的负载。正确理解和使用一级缓存,以及学会管理缓存,是优化...
《深入理解Hibernate的一级缓存与二级缓存》 Hibernate作为一款强大的ORM框架,其缓存机制是优化数据库操作性能的关键之一。缓存主要分为一级缓存和二级缓存,它们各自承担着不同的职责,共同提升了数据访问的效率...
一级缓存是Hibernate默认提供的缓存,每个SessionFactory实例都有一个一级缓存。当对象被加载到内存中时,它们会被存储在一级缓存中。一级缓存是事务级的,意味着它只存在于当前事务内,一旦事务提交或回滚,一级...
用以介绍hibernate 框架的缓存机制
其中,一级缓存是Hibernate的核心特性之一,它是一个session级别的缓存,用于存储当前Session中的持久化对象。在这个示例中,我们将通过纯Java代码来模拟Hibernate的一级缓存机制。 首先,我们来看一下一级缓存的...
hibernate 一级缓存、 持久化对象状态和转换、 多表映射操作
首先,一级缓存是Hibernate默认提供的缓存,每个Session都有一个独立的一级缓存。当我们在操作数据库时,例如查询或更新记录,这些操作实际上是在与一级缓存交互。一级缓存的作用在于减少对数据库的直接访问,提高...
Hibernate一级缓存是指Session级别的缓存,它是默认开启的,每个Session都会维护一个对象缓存,用来存放该Session加载的实体对象。一级缓存的生命周期与Session相同,当Session关闭时,一级缓存中的数据也会被清除。...
一级缓存是Session级别的,每个Session都有自己的一级缓存,用于存储当前Session操作的对象。而二级缓存则是SessionFactory级别的,它跨越了多个Session,是全局共享的,可以被多个并发的Session共同使用。 二级...
一级缓存是Hibernate默认提供的缓存,它是Session级别的,每个Hibernate Session都有一个私有的、本地的一级缓存。当我们在Session中对对象进行 CRUD(创建、读取、更新、删除)操作时,这些对象会被自动放入一级...
本文将深入探讨Hibernate性能优化中的一个重要概念——一级缓存,并结合给出的压缩包文件“hibernate_cache_level1”,来详细解析一级缓存的工作原理及其优化策略。 一级缓存是Hibernate内置的一种缓存机制,它存在...
Hibernate一级缓存和二级缓存详解 Hibernate是一种流行的基于Java的持久化框架,它提供了两种缓存机制:一级缓存和二级缓存。了解这两种缓存机制是非常重要的,因为它们可以极大地提高应用程序的性能。 一级缓存 ...
这与一级缓存(Session级别)不同,一级缓存仅存在于单个Session生命周期内,当Session关闭时,一级缓存中的数据会丢失。二级缓存的存在减少了对数据库的直接访问,从而提高了数据读取速度。 为了启用Hibernate的二...