hibernate缓存机制
来源:互联网 发布:淘宝领优惠券的网站 编辑:程序博客网 时间:2024/06/05 11:57
一级缓存(session缓存)
1、生命周期就是session的生命周期
2、一级缓存存放的数据都是私有数据
把session存放在threadlocal中,不同的线程是不能访问的,所以保证了数据的安全性
3、怎么样把数据存放到一级缓存中
利用session.save/update/load/get方法都可以存放在一级缓存中
4、利用session.get/load方法可以把数据从一级缓存中取出
5、session.evict方法可以把一个对象从一级缓存中清空
6、利用session.clear方法可以把session中的所有的数据清空
7、利用session.Refresh方法把数据库中的数据同步到缓存中
8、session.flush
在session的缓存内部,会去检查所有的持久化对象
1、如果一个持久化对象没有ID值,则会发出insert语句
2、如果一个持久化对象有ID值,则会去检查快照进行对比,如果一样,则什么都不做,如果不一样,则发出update语句
3、检查所有的持久化对象是否有关联对象
检查关联对象的级联操作
检查关联对象的关系操作
9、批量操作
java代码示例
/** * session.get方法把数据存放在一级缓存中 *//** * session.load方法把数据存放在一级缓存中 *//** * session.save方法把数据保存在一级缓存中 *//** * session.update方法把数据保存在一级缓存中 */@Testpublic void testUpdate(){Session session = sessionFactory.getCurrentSession();Transaction transaction = session.beginTransaction();Classes classes = (Classes)session.get(Classes.class, 1L);session.evict(classes);//classes对象从session中清空了session.update(classes);//把classes对象放入到了session缓存中classes = (Classes)session.get(Classes.class, 1L);transaction.commit();}/** * session.clear */@Testpublic void testClear(){Session session = sessionFactory.getCurrentSession();Transaction transaction = session.beginTransaction();Classes classes = (Classes)session.get(Classes.class, 1L);session.clear();//classes对象从session中清空了classes = (Classes)session.get(Classes.class, 1L);transaction.commit();}@Testpublic void testClearTest(){Session session = sessionFactory.getCurrentSession();Transaction transaction = session.beginTransaction();Classes classes = (Classes)session.get(Classes.class, 1L);session.clear();//如果不加这句话,两个不同的对象,相同的ID值,所以得把其中的一个清空Classes classes2 = new Classes();classes2.setCid(1L);classes2.setCname("asfd");session.update(classes2);transaction.commit();}/** * 把数据库中的数据刷新到缓存中 */@Testpublic void testRefresh(){Session session = sessionFactory.getCurrentSession();Transaction transaction = session.beginTransaction();Classes classes = (Classes)session.get(Classes.class, 1L);classes.setCname("66");session.refresh(classes);//把cid为1的值从数据库刷到了缓存中System.out.println(classes.getCname());transaction.commit();}/** * session.flush */@Testpublic void testFlush(){Session session = sessionFactory.getCurrentSession();Transaction transaction = session.beginTransaction();Classes classes =(Classes)session.get(Classes.class, 1L);classes.setCname("afdsasdf");Set<Student> students = classes.getStudents();for(Student student:students){student.setDescription("asdf");}session.flush();transaction.commit();}/** *向数据库中插入一百万条数据 */@Testpublic void testSaveBatch(){Session session = sessionFactory.getCurrentSession();Transaction transaction = session.beginTransaction();for(int i=6;i<1000000;i++){Classes classes = new Classes();classes.setCname("aaa");classes.setDescription("afds");session.save(classes);//若不使用此判断则会产生内存溢出,//因为session.save()操作会将对象持久化存在内存中if(i%50==0){session.flush();session.clear();}}transaction.commit();}/** * session.flush只是发出SQL语句了,并没有清空session缓存 */@Testpublic void testFlush2(){Session session = sessionFactory.getCurrentSession();Transaction transaction = session.beginTransaction();Classes classes = (Classes)session.get(Classes.class, 1L);session.flush();classes = (Classes)session.get(Classes.class, 1L);transaction.commit();}
二级缓存:
二级缓存:存放公有数据
1、适用场合:
1、数据不能频繁更新
2、数据能公开,私密性不是很强
2、hibernate本身并没有提供二级缓存的解决方案
3、二级缓存的实现是依赖于第三方供应商完成的
ehcache
oscache
jbosscache
swamchache
4、二级缓存的操作
1、二级缓存存在sessionFactory中
2、生命周期:与sessionFactory保持一致
3、使用二级缓存的步骤 1、在hibernate.cfg.xml <property name="cache.use_second_level_cache">true</property> <property name="cache.provider_class"> org.hibernate.cache.EhCacheProvider </property> 2、让某一个对象进入到二级缓存中 * 在hibernate.cfg.xml中配置 <class-cache usage="read-only" class="cn.itcast.hiberate.sh.domain.Classes"/> * 在映射文件中 <cache usage="read-only"/> 3、使用 session.get/session.load
查询缓存:
查询缓存是基于二级缓存的额,我们必须先将二级缓存配置好
在hibernate.cfg.xml中填入如下配置
<property name="cache.use_query_cache">true</property>
- Hibernate缓存机制介绍
- Hibernate:缓存机制解析
- Hibernate:缓存机制解析
- Hibernate的缓存机制
- Hibernate的缓存机制
- Hibernate的缓存机制
- HIbernate缓存机制
- Hibernate的缓存机制
- hibernate的缓存机制
- Hibernate缓存机制
- Hibernate缓存机制2
- Hibernate缓存机制介绍
- Hibernate缓存机制
- hibernate缓存机制
- hibernate 缓存机制
- hibernate缓存机制
- Hibernate缓存机制
- hibernate缓存机制
- 【CF】CodeForces 301A Yaroslav and Sequence
- test03
- 正则表达式语法
- 知道创宇研发技能表v2.2
- oracle pl sql CURSOR_ALREADY_OPEN
- hibernate缓存机制
- C++中的static使用
- 通过tomcat实现多域名配置
- java设计模式(创建型)之生成器模式
- Java小游戏——捕鱼达人
- 算法导论的思维导图,采用xmind制作。
- 在本机用Toad远程连接Oracle数据库
- 驱动程序编写入门以及驱动程序加载
- Binary Tree Level Order Traversal II