千家信息网

Hibernate一级缓存是什么

发表于:2024-10-14 作者:千家信息网编辑
千家信息网最后更新 2024年10月14日,本篇内容介绍了"Hibernate一级缓存是什么"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在学习
千家信息网最后更新 2024年10月14日Hibernate一级缓存是什么

本篇内容介绍了"Hibernate一级缓存是什么"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

在学习Hibernate中,我们都知道由于一级Hibernate缓存的生命周期跟Session的生命周期一样,所以也可以理解为一级Hibernate缓存是session缓存。

一、通过在做查询的时候,有几个查询方法支持一级Hibernate缓存,它们分别是:load(),get(),iterate(),其中要注意的是iterate方法只对实体对象查询才支持一级缓存,如果使用iterate来查询对象里面的相关属性,则查询的时候不支持一级缓存。

1、load()方法。

例子:

Student s = (Student)session.load(Student.class, 1);              System.out.println(s.getName());              System.out.println("---------------------");              s = (Student)session.load(Student.class, 1);             System.out.println(s.getName());

只发出一条sql语句,虽然这里使用两次load方法,但是***次load方法对于id为1的记录进行加载,到第3行才发出一条sql语句及符合的数据,这样就把数据放在一级缓存里面,在第4行开始继续使用load就从一级缓存里面抽取。

2、get()方法。

例子:

Student s = (Student)session.get(Student.class, 1);              System.out.println(s.getName());             System.out.println("---------------------");              s = (Student)session.load(Student.class, 1);              System.out.println(s.getName());

跟1中load一样,只发出一条sql语句。

3、iterate()方法查询实体对象

例子:

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());

总共发出3条sql语句,1、2行发出两条语句,1条是查询实体对象的sql,另一条是查询实体对象的name属性,由于使用一级缓存,之前1、2行查询的实体存放在一级缓存里面,所以5、6行利用一级缓存里面的数据只发出一条查询id的sql。

4、iterate()方法查询实体对象属性(不支持一级缓存)

例子:

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);

由于iterate()方法查询实体对象属性,一级缓存不会产生作用,所以发出两条sql语句。

二、一级缓存是存在的,所以要更加合理的管理好,提高程序的效率,通常都是通过clear(),evict()方法来清除缓存,当不需要使用一级缓存或者是更加高效率使用一级缓存。

如果在一次性更新或者加入数量量比较大的情况下,更加要管理好一级缓存。

例子:

for(int i=0;i<10000;i++)              {                  Student s = new Student();                  s.setName("s"+i);                  session.save(s);                  if(i%20==0)                  {                      session.flush();                      session.clear();                 }             }

在数据量比较大的情况下管理一级缓存的做法,一般都是设定一定数量的记录给更新或者保存等操作之后,避免一次性大量的实体数据入库导致内存溢出,所以才去先是用第8行的flush和第9行的clear方法来实现比较好的缓存管理。

在数据量特别大的时候,可以使用jdbc来实现,因为hibernate不太适合于数据量特别大的场合使用,如果连jdbc都满足不了数据量的效率要求,只好利用相关的数据库机制来实现。

"Hibernate一级缓存是什么"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

缓存 查询 方法 实体 对象 数据 语句 例子 属性 支持 管理 情况 时候 一次性 内容 周期 效率 数量 更多 生命 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 网络安全态势预测技术指标 杭州巨声网络技术有限公司 企业行业分类数据库 有什么属于网络安全设备 兰州网络安全学习 易语言数据库如何在电脑上下载 各种软件开发工具的差别 国际版mc怎么安装服务器 开增值税软件开发 网络安全教育宣传活动总结 中国图书馆古籍有多少数据库 时尚品幼网络技术有限公司 中国网络安全市场报告 net 数据库操作一般用什么好 河北ios软件开发前端 苏州加号互联网科技有限公司 软件开发数字管理的缺陷 能用的ntp服务器 水星网络安全概念股 广州数据库数据恢复 上海涌铉网络技术公司樊科委 sql 数据库太大 收缩 嵌入式软件开发的典型特征是 未成年涉及网络安全案例视频 研究生软件开发自荐信 腾讯云服务器技术支持高级工程师 基础综合数据库 centos7服务器优化脚本 郑州网络安全宣传工作 软件开发项目核心技术
0