- 浏览: 449214 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
飞天奔月:
我来个简单点的代码 使用 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 496java开发实战视频详解 链接: http://pan.bai ... -
什么样的数据适合存放到第二级缓存中
2009-04-11 17:15 1685(一)Hibernate的二级缓存策略的一般过程如下: 1) ... -
hibernate二级缓存攻略
2009-04-10 18:13 947http://www.iteye.com/topic/1890 ... -
关于hibernate缓存的问题
2009-04-10 18:12 10161. 关于hibernate缓 ... -
get方法和load方法区别
2009-04-03 18:38 1353hibernate中get方法和load方法的根本区别在于:如 ... -
Hibernate性能调优(重点理解)
2009-03-02 12:48 1240一。 inverse = ? inv ... -
hibernate查询缓存
2009-03-02 11:17 3731hibernate查询缓存 查询缓存是缓存普通属性结果集 ... -
浅谈hibernate性能优化的几点建议
2009-02-21 11:15 975浅谈hibernate性能优化的几点建议 1、针对orac ... -
Hibernate抓取策略
2009-02-17 12:37 1335hibernate抓取策略(单端代理的批量抓取) 保持< ... -
Hibernate二级缓存的使用
2009-02-17 12:22 10041.加入ehcase.xml文件; 2.在配置文件中加入如下代 ... -
HQL (十) 统计查询
2009-02-02 18:28 2316统计查询(重要) 参见:StatQueryTest.java ... -
HQL (九) 连接查询
2009-02-02 18:25 6085连接查询(重要) * 内连接 * 外连接(左连接/右连接) ... -
HQL (八) 对象导航查询
2009-02-02 13:17 2077对象导航查询,在hql中采用.进行导航(重要) 参见:Obj ... -
HQL (七) 分页查询
2009-02-02 13:05 1157分页查询(重要) * setFirstResult(),数据 ... -
HQL (六) 查询过滤器
2009-02-02 12:22 1812查询过滤器 设置了查 ... -
HQL (五) 外置命名查询(sql语句单独保存起来)
2009-02-02 12:04 2259外置命名查询 * 在要查询对象对应的映射文件(这里是stud ... -
HQL (四) 原生sql查询
2009-02-02 11:27 1833hibernate也支持直接sql进行查询 参见:SqlQu ... -
HQL (三) 条件查询
2009-02-02 11:13 2555条件查询(重要) * 可以采用拼字符串的方式传递参数 * ... -
HQL (二) 实体对象查询
2009-02-02 11:05 1525实体对象查询(重要) * N+1问题,在默认情况下 ... -
HQL (一) 简单属性查询
2009-02-02 01:13 1890简单属性查询(重要) * 单一属性查询,返回结果集是属性列表 ...
相关推荐
hibernate一级缓存和二级缓存的区别与联系
Hibernate一级缓存、二级缓存以及查询缓存实例
NULL 博文链接:https://jiaguwen123.iteye.com/blog/740606
Hibernate 一级缓存和二级缓存的区别
NULL 博文链接:https://cdxs2.iteye.com/blog/1936594
NULL 博文链接:https://12345678.iteye.com/blog/721910
hibernate的一级缓存和二级缓存,hibernate的一级缓存和二级缓存,hibernate的一级缓存和二级缓存,hibernate的一级缓存和二级缓存,hibernate的一级缓存和二级缓存
Hibernatehibernate一级缓存.pdf
Hibernate一级缓存和二级缓存【内附二级缓存数据存储结构】
用以介绍hibernate 框架的缓存机制
hibernate 一级缓存、 持久化对象状态和转换、 多表映射操作
NULL 博文链接:https://364232252.iteye.com/blog/2369161
主要介绍了java模拟hibernate一级缓存示例,需要的朋友可以参考下
Hibernat一级缓存(源码) 需要的自己下载参考!!!
主要讲解hibernate缓存的配置和和使用方法,以及一级缓存和二级缓存的定义和区别,和查询缓存的使用
今天小编就为大家分享一篇关于Hibernate一级缓存和二级缓存详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
NULL 博文链接:https://quicker.iteye.com/blog/660498
详细描述了,Hibernate中一级缓存和二组缓存的思想思路,以及使用方法,使用情况。
做一个hibernate 二级缓存的例子,其中都已经加了注释,一看就明白,数据库需要自己建
Hibernate二级缓存 在一个数据库系统中,如果缓存设置的合适,那么可以极大的提高系统的效率,Hibernate作为一个ORM工具 提供了缓存的机制,包括一级(Session级)缓存和二级(SessionFactory级)缓存。这里主要...