Hibernate——一级缓存__二级缓存__查询缓存
来源:互联网 发布:网络教育学籍参军 编辑:程序博客网 时间:2024/06/08 00:47
一级缓存
session级别缓存
@Test public void testCache() { testSaveGroup(); Session session = sf.getCurrentSession(); session.beginTransaction(); Group g = (Group)session.get(Group.class, 1); System.out.println(g.getName()); Group g2 = (Group)session.get(Group.class, 1); System.out.println(g2.getName()); session.getTransaction().commit();// Session session2 = sf.getCurrentSession();// session2.beginTransaction();// Group g2 = (Group)session2.get(Group.class, 1);// System.out.println(g2.getName());// session2.getTransaction().commit(); }
在同一个session中第二次调用同一个对象时不会再发出sql语句,而是直接从session缓存中找
@Test public void testCache() { testSaveGroup(); Session session = sf.getCurrentSession(); session.beginTransaction(); Group g = (Group)session.get(Group.class, 1); System.out.println(g.getName());// Group g2 = (Group)session.get(Group.class, 1);// System.out.println(g2.getName()); session.getTransaction().commit(); Session session2 = sf.getCurrentSession(); session2.beginTransaction(); Group g2 = (Group)session2.get(Group.class, 1); System.out.println(g2.getName()); session2.getTransaction().commit(); }
一级缓存无法跨session取,在不同session中取同一个对象发出了两次sql
二级缓存
sessionFactory级别缓存,可以跨session存在。
在内存中开辟一块公共的空间,所有的session都可以从中存取数据。
@Test public void testCache() { testSaveGroup(); Session session = sf.getCurrentSession(); session.beginTransaction(); Group g = (Group)session.get(Group.class, 1); System.out.println(g.getName());// Group g2 = (Group)session.get(Group.class, 1);// System.out.println(g2.getName()); session.getTransaction().commit(); Session session2 = sf.getCurrentSession(); session2.beginTransaction(); Group g2 = (Group)session2.get(Group.class, 1); System.out.println(g2.getName()); session2.getTransaction().commit(); }
跨session也只发了一次sql语句
二级缓存适用条件
1.经常被访问
2.不经常改动
3.数量有限
load默认使用二级缓存
iterate默认使用二级缓存
list默认往二级缓存加数据,但查询时不用二级缓存
查询缓存(三级缓存)
配置文件中添加
<property name="hibernate.cache.use_query_cache">true</property>
二级缓存中的一种特殊缓存
list查询时是直接从数据库找的,设置了查询缓存后,如果是同样的重复的查询,就可以从二级缓存中找。
不使用查询缓存
@Test public void testCache2() { testSaveGroup(); Session session = sf.getCurrentSession(); session.beginTransaction(); List<User> users = session.createQuery("from User").list(); List<User> users2 = session.createQuery("from User").list(); session.getTransaction().commit(); }
使用查询缓存
@Test public void testCache2() { testSaveGroup(); Session session = sf.getCurrentSession(); session.beginTransaction(); List<User> users = session.createQuery("from User").setCacheable(true).list(); List<User> users2 = session.createQuery("from User").setCacheable(true).list(); session.getTransaction().commit(); }
阅读全文
0 0
- Hibernate——一级缓存__二级缓存__查询缓存
- hibernate的一级缓存、二级缓存、查询缓存
- hibernate 一级缓存、二级缓存、查询缓存
- 关于hibernate一级缓存二级缓存,查询缓存
- hibernate一级缓存,二级缓存和查询缓存
- hibernate 一级缓存二级缓存及查询缓存
- hibernate一级缓存,二级缓存和查询缓存
- hibernate一级缓存,二级缓存,查询缓存
- Hibernate 一级缓存,二级缓存,查询缓存
- Hibernate 一级缓存,二级缓存,查询缓存
- Hibernate 一级缓存、二级缓存、查询缓存比较
- hibernate —— 一级缓存和二级缓存
- Hibernate一级缓存 & 二级缓存
- Hibernate一级缓存,二级缓存
- Hibernate一级缓存 & 二级缓存
- Hibernate一级缓存,二级缓存
- hibernate一级缓存 二级缓存
- hibernate 一级缓存、二级缓存
- 接口和抽象类的区别
- ATL--创建简单的ATL之dll工程,给接口添加属性(实际上就是一个函数对)
- XAMARIN模拟器的配置与连接
- View中的onDraw()方法的canvas的来由
- js的call 与 apply 方法
- Hibernate——一级缓存__二级缓存__查询缓存
- PHP身份证、手机常用规则验证
- js滑动到底部加载更多
- MySQL 5.6 (Win7 64位)下载、安装与配置图文教程
- spring aop学习--拦截controller
- cloud_note项目的搭建
- 联想台式机Windows 7系统设置双显示器输出
- 二进制中1的个数
- javaSE 第77节课