Hibernate一级缓存是什么

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

本文介绍了“什么是Hibernate L1缓存”的知识。很多人在实际案例的操作中会遇到这样的困难。接下来,让边肖带领大家学习如何应对这些情况!希望大家认真阅读,学点东西!

在研究Hibernate的时候,我们都知道由于一级Hibernate缓存的生命周期和session的生命周期是一样的,所以也可以理解为一级Hibernate缓存就是Session缓存。

1.查询时,有几种查询方法支持一级Hibernate缓存,分别是load()、get()和iterate()。需要注意的是,在查询实体对象时,iterate方法只支持一级缓存。如果迭代用于查询对象中的相关属性,则查询时不支持一级缓存。

1、load()方法。

示例:

学生=(学生)会话.负载(学生.班级,1);system . out . println(s . getname());system . out . println('-');s=(学生)会话.负载(学生.类,1);system . out . println(s . getname());将只发出一条sql语句。虽然这里使用了两次load方法,但是id为1的记录会被load方法加载****次,并且在第三行只会发出一条sql语句和相应的数据,这样数据就会放在一级缓存中,在第四行使用load后会从一级缓存中提取出来。

2、get()方法。

示例:

学生=(学生)会话. get(学生.类,1);system . out . println(s . getname());system . out . println('-');s=(学生)会话.负载(学生.类,1);system . out . println(s . getname());就像1中的加载一样,只发出一条sql语句。

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

示例:

学生学习=(学生)会话。创建查询(' fromStudentswheres.id=1 ')。迭代()。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一级缓存是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/133794.html

(0)

相关推荐

  • uk是哪个国家的缩写,欧洲各个国家的英文缩写

    技术uk是哪个国家的缩写,欧洲各个国家的英文缩写AT Austria 奥地利 欧洲 BE Belgium 比利时 欧洲
    BG Bulgaria 保加利亚 欧洲
    CH Switzerland 瑞士 欧洲
    CZ Czec

    生活 2021年10月27日
  • 香港云服务器比VPS好在哪

    技术香港云服务器比VPS好在哪香港云服务器的优势相比VPS在于资源的精确共享。这意味着您确切地知道您购买了什么,因此您可以在网站上交易多少访问者以及限制是什么。香港云服务器的特点是: 更好的CPU核心分配 为了更好的理解

    礼包 2021年12月8日
  • docker 多个环境装在一个镜像内(docker如何编辑已经构建好的镜像)

    技术Docker镜像怎么做到一次构建,到处运行这篇文章主要介绍“Docker镜像怎么做到一次构建,到处运行”,在日常操作中,相信很多人在Docker镜像怎么做到一次构建,到处运行问题上存在疑惑,小编查阅了各式资料,整理出

    攻略 2021年12月13日
  • C++ STL中常用算法怎么使用

    技术C++ STL中常用算法怎么使用这篇文章主要讲解了“C++ STL中常用算法怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++ STL中常用算法怎么使用”吧

    攻略 2021年11月29日
  • arctanx的值域,arctanx的极限怎么求

    技术arctanx的值域,arctanx的极限怎么求arctanx的极限用洛必达法则求解。洛必达法则是在一定条件下通过分子分母分别求导再求极限来确定未定式值的方法。众所周知arctanx的值域,两个无穷小之比或两个无穷大

    生活 2021年10月25日
  • androidmonkey测试工具的完善思路(androidmonkey教程)

    技术Android中的monkey实战是怎样的这篇文章将为大家详细讲解有关Android中的monkey实战是怎样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。环境介绍

    攻略 2021年12月24日