- 浏览: 1207028 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (718)
- HTML (13)
- JS基础 (23)
- JS应用 (40)
- AJAX (6)
- JSP相关 (12)
- JAVA基础 (52)
- JAVA应用 (74)
- APPLET (11)
- SWING\RCP (2)
- JAVA反射 (6)
- 设计模式 (26)
- 数据库设计 (20)
- Struts (35)
- Struts2 (12)
- Spring (22)
- Hibernate (45)
- Ibatis (18)
- mybatis (3)
- SSH (8)
- UML (5)
- WebService (3)
- XML (16)
- Log4j (7)
- WEB容器 (26)
- 数据结构 (36)
- Linux (34)
- Ruby on Rails (1)
- 其它技术 (27)
- IDE配置 (15)
- 项目实战 (2)
- Oracle (69)
- JAVA报表 (7)
- Android学习 (2)
- 博客链接 (1)
- 网络基础 (1)
- WEB集群 (1)
- .Net开发 (11)
- PB (4)
- 系统构建 (15)
最新评论
-
jnjeC:
牛逼啊哥们,讲得太好了
Maven仓库理解、如何引入本地包、Maven多种方式打可执行jar包 -
九尾狐的yi巴:
很好 感谢!
Itext中文处理(更新版) -
luweifeng1983:
有用的,重启一下嘛。
设置eclipse外部修改文件后自动刷新 -
Master-Gao:
设置了也不管用,怎么破呢?
设置eclipse外部修改文件后自动刷新 -
aigo_h:
锋子还有时间写博客,还是很闲哈!
Add directory entries问题
一级缓存与session周期一致,二级缓存与sessionFactory一致。
session一级缓存 1、一级缓存很短,和session的生命周期一致,随着session的关闭而消失 *load/get/iterate(查询实体对象)可以使用缓存数据 2、一级缓存它缓存的是实体对象 3、如果管理缓存,如session.clear()/session.evict() 4、如何避免一次性大批量实体数据插入内存溢出的问题? *先执行flush,在用clear清除缓存
班级与学生类,一对多示例演示
package com.bjsxt.hibernate; import java.io.Serializable; import org.hibernate.Session; import junit.framework.TestCase; public class CacheLevel1Test extends TestCase { /** * 发出两次load查询,只发出一条语句 * */ public void testCache1() { Session session = null; try { session = HibernateUtils.getSession(); Student student = (Student)session.load(Student.class, 1); System.out.println("学生姓名:" + student.getName()); //因为有一级缓存,load方法使用一级缓存,所以本次查询不再发出sql student = (Student)session.load(Student.class, 1); System.out.println("学生姓名:" + student.getName()); }catch(Exception e) { e.printStackTrace(); }finally { HibernateUtils.closeSession(session); } } /** * 发出两次get查询 * */ public void testCache2() { Session session = null; try { session = HibernateUtils.getSession(); Student student = (Student)session.get(Student.class, 1); System.out.println("学生姓名:" + student.getName()); //因为有一级缓存,get方法使用一级缓存,所以本次查询不再发出sql student = (Student)session.get(Student.class, 1); System.out.println("学生姓名:" + student.getName()); }catch(Exception e) { e.printStackTrace(); }finally { HibernateUtils.closeSession(session); } } /** * 发出两次iterate查询实体对象 * */ public void testCache3() { Session session = null; try { session = HibernateUtils.getSession(); Student student = (Student)session.createQuery("from Student where id=1").iterate().next(); System.out.println("学生姓名:" + student.getName()); //因为有一级缓存,iterate方法使用一级缓存,发出查询id的sql,不再发出查询实体对象的sql,一级缓存它缓存的是实体对象 student = (Student)session.createQuery("from Student where id=1").iterate().next(); System.out.println("学生姓名:" + student.getName()); }catch(Exception e) { e.printStackTrace(); }finally { HibernateUtils.closeSession(session); } } /** * 发出两次iterate查询普通属性 * */ public void testCache4() { Session session = null; try { session = HibernateUtils.getSession(); String name = (String)session.createQuery("select name from Student where id=1").iterate().next(); System.out.println("学生姓名:" + name); //Iterate查询普通结果集,一级缓存不会缓存,它也不会发出查询id的sql name = (String)session.createQuery("select name from Student where id=1").iterate().next(); System.out.println("学生姓名:" + name); }catch(Exception e) { e.printStackTrace(); }finally { HibernateUtils.closeSession(session); } } /** * 打开两次session,调用load测试 * */ public void testCache5() { Session session = null; try { session = HibernateUtils.getSession(); Student student = (Student)session.load(Student.class, 1); System.out.println("学生姓名:" + student.getName()); }catch(Exception e) { e.printStackTrace(); }finally { HibernateUtils.closeSession(session); } //打开第二个session try { session = HibernateUtils.getSession(); //会发出sql,session间是不能共享一级缓存数据的 //因为它会伴随session的生命周期存在和消亡 Student student = (Student)session.load(Student.class, 1); System.out.println("学生姓名:" + student.getName()); }catch(Exception e) { e.printStackTrace(); }finally { HibernateUtils.closeSession(session); } } /** * 先执行save,再执行load进行测试 * */ public void testCache6() { Session session = null; try { session = HibernateUtils.getSession(); session.beginTransaction(); Student student = new Student(); student.setName("张三"); Serializable id = session.save(student); //因为save会将实体对象的数据缓存到session中 //所以再次查询相同数据,不会发出sql Student newStudent = (Student)session.load(Student.class, id); System.out.println("学生姓名:" + newStudent.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(); Student student = (Student)session.load(Student.class, 1); System.out.println("学生姓名:" + student.getName()); //管理session缓存(一级缓存机制无法取消的,但可以管理缓存,如:clear,evict方法) session.evict(student); //session.clear(); //发出sql,因为缓存中的student实体类,已经被逐出 student = (Student)session.load(Student.class, 1); System.out.println("学生姓名:" + student.getName()); }catch(Exception e) { e.printStackTrace(); }finally { HibernateUtils.closeSession(session); } } /** * 向数据库中插入10000学生数据 * */ public void testCache8() { Session session = null; try { session = HibernateUtils.getSession(); session.beginTransaction(); for (int i = 0; i < 10000; i++) { Student student = new Student(); student.setName("Student_" + i); session.save(student); //每100条数据就强制session将数据持久化 //同时清空缓存,以避免在大量的数据下,造成内存溢出 if ( i % 100 == 0) { session.flush(); session.clear(); } } session.getTransaction().commit(); }catch(Exception e) { e.printStackTrace(); session.getTransaction().rollback(); }finally { HibernateUtils.closeSession(session); } } }
- hibernate_cache_level1.rar (14.1 KB)
- 下载次数: 8
发表评论
-
Hibernate抓取策略二
2010-05-11 17:56 1046在Classes与Student一对多映射中,我们将Set里面 ... -
Hibernate抓取策略一
2010-05-11 16:29 1293抓取策略指多表关联查询的时候,Hibernate会发出多条sq ... -
Hibernate查询缓存
2010-05-11 01:15 1582二级缓存中,如果不设置“查询缓存”,那么hibernate只会 ... -
Hibernate所需完整类库
2010-05-11 01:08 864附件为最新配置Hibernate所需的包. 由来: 一、下 ... -
Hibernate 二级缓存缺少包出现的异常
2010-05-10 23:29 2290由于二级缓存使用的包org.hibernate.cache.E ... -
转:Hibernate性能优化之二级缓存
2010-05-10 17:28 1101http://chenhongbin007.blog.163. ... -
Hibernate lazy加载FOR 单端关联
2010-05-10 00:54 1280Hibernate单端关联懒加载策略:即在<one-to ... -
Hibernate lazy加载FOR Connection
2010-05-10 00:28 1150Hibernate集合属性的懒加载策略: 在集合属性上, ... -
Hibernate lazy加载FOR Class
2010-05-09 23:51 1004lazy策略可以用在: * <class>标签 ... -
Hibernate性能优化:二级缓存
2010-05-06 16:48 1021hibernate二级缓存 定义步骤: 1、打开缓存, ... -
Hibernate悲观锁与乐观锁及事务管理机制
2010-05-06 11:57 1149引用: 悲观锁与乐观锁: http://www.iteye ... -
Hibernate学习笔记博客
2010-05-06 11:32 696网上也有人自学hibernate的笔记 http://hi. ... -
Hibernate与EJB的区别
2010-05-05 18:09 836Hibernate不支持分布式应用 -
Hibernate对象状态
2010-05-05 17:48 1743Hibernate对象有三种状态: 瞬时状态(Transie ... -
Hibernate HQL示例十二:DML更新、删除及与Hibernate持久化更新
2010-05-05 16:42 1931DML更新及删除 示例: package com.bjsx ... -
Hibernate HQL示例十一:分页查询
2010-05-05 16:21 1089分页查询: select * from t_student ... -
Hibernate HQL示例十:统计查询
2010-05-05 15:57 2085统计函数的使用 count(*) 等 package co ... -
Hibernate HQL示例九:连接查询
2010-05-05 15:38 3497inner join left out join rig ... -
Hibernate HQL示例八:查询对象导航及Implicit Join
2010-05-05 10:32 1662通过Student对象导航到class对象的id 如下: ... -
Hibernate HQL示例七:查询过滤器的使用
2010-05-05 01:58 1296查询过滤器指的是:配置好后,会在该对象上的每一条查询语句上自动 ...
相关推荐
主键生成策略使用,PO对象状态及状态的转换分析、一级缓存,Hibernate数据检索技术,Hibernate高级映射技术,Hibernate多表联合查询, Hibernate二级缓存技术,Hibernate分页技术,Hibernate性能优化技术。...
主键生成策略使用,PO对象状态及状态的转换分析、一级缓存,Hibernate数据检索技术,Hibernate高级映射技术,Hibernate多表联合查询, Hibernate二级缓存技术,Hibernate分页技术,Hibernate性能优化技术。...
主键生成策略使用,PO对象状态及状态的转换分析、一级缓存,Hibernate数据检索技术,Hibernate高级映射技术,Hibernate多表联合查询, Hibernate二级缓存技术,Hibernate分页技术,Hibernate性能优化技术。...
目录 课程内容 1 HelloWorld 2 Hibernate原理模拟 - 什么是O/R Mapping以及为什么... 4 一级缓存和二级缓存和査询缓存(面试题)(详见hibernate_3000_Hibernate_3KindsOf_Cache) 5 事务并发处理(面试的意义更大)
22.3 管理Hibernate的第一级缓存 22.4 管理Hibernate的第二级缓存 22.4.1 配置进程范围内的第二级缓存 22.4.2 配置集群范围内的第二级缓存 22.4.3 在应用程序中管理第二级缓存 22.4.4 Session与第二级...
主键生成策略使用,PO对象状态及状态的转换分析、一级缓存,Hibernate数据检索技术,Hibernate高级映射技术,Hibernate多表联合查询, Hibernate二级缓存技术,Hibernate分页技术,Hibernate性能优化技术。...
主键生成策略使用,PO对象状态及状态的转换分析、一级缓存,Hibernate数据检索技术,Hibernate高级映射技术,Hibernate多表联合查询, Hibernate二级缓存技术,Hibernate分页技术,Hibernate性能优化技术。...
主键生成策略使用,PO对象状态及状态的转换分析、一级缓存,Hibernate数据检索技术,Hibernate高级映射技术,Hibernate多表联合查询, Hibernate二级缓存技术,Hibernate分页技术,Hibernate性能优化技术。...
主键生成策略使用,PO对象状态及状态的转换分析、一级缓存,Hibernate数据检索技术,Hibernate高级映射技术,Hibernate多表联合查询, Hibernate二级缓存技术,Hibernate分页技术,Hibernate性能优化技术。...
主键生成策略使用,PO对象状态及状态的转换分析、一级缓存,Hibernate数据检索技术,Hibernate高级映射技术,Hibernate多表联合查询, Hibernate二级缓存技术,Hibernate分页技术,Hibernate性能优化技术。...
主键生成策略使用,PO对象状态及状态的转换分析、一级缓存,Hibernate数据检索技术,Hibernate高级映射技术,Hibernate多表联合查询, Hibernate二级缓存技术,Hibernate分页技术,Hibernate性能优化技术。...
主键生成策略使用,PO对象状态及状态的转换分析、一级缓存,Hibernate数据检索技术,Hibernate高级映射技术,Hibernate多表联合查询, Hibernate二级缓存技术,Hibernate分页技术,Hibernate性能优化技术。...
主键生成策略使用,PO对象状态及状态的转换分析、一级缓存,Hibernate数据检索技术,Hibernate高级映射技术,Hibernate多表联合查询, Hibernate二级缓存技术,Hibernate分页技术,Hibernate性能优化技术。...
主键生成策略使用,PO对象状态及状态的转换分析、一级缓存,Hibernate数据检索技术,Hibernate高级映射技术,Hibernate多表联合查询, Hibernate二级缓存技术,Hibernate分页技术,Hibernate性能优化技术。...
主键生成策略使用,PO对象状态及状态的转换分析、一级缓存,Hibernate数据检索技术,Hibernate高级映射技术,Hibernate多表联合查询, Hibernate二级缓存技术,Hibernate分页技术,Hibernate性能优化技术。...
22.3 管理Hibernate的第一级缓存 22.4 管理Hibernate的第二级缓存 22.4.1 配置进程范围内的第二级缓存 22.4.2 配置集群范围内的第二级缓存 22.4.3 在应用程序中管理第二级缓存 22.4.4 Session与第二级...
22.3 管理Hibernate的第一级缓存 22.4 管理Hibernate的第二级缓存 22.4.1 配置进程范围内的第二级缓存 22.4.2 配置集群范围内的第二级缓存 22.4.3 在应用程序中管理第二级缓存 22.4.4 Session与第二级...
22.3 管理Hibernate的第一级缓存 22.4 管理Hibernate的第二级缓存 22.4.1 配置进程范围内的第二级缓存 22.4.2 配置集群范围内的第二级缓存 22.4.3 在应用程序中管理第二级缓存 22.4.4 Session与第二级...
第一部分 从Hibernate和EJB 3.0开始 第1章 理解对象/关系持久化 1.1 什么是持久化 1.1.1 关系数据库 1.1.2 理解SQL 1.1.3 在Java中使用SQL 1.1.4 面向对象应用程序中的持久化 1.2 范式不...