Hibernate采用缓存机制提高数据查询效率。缓存分为一级缓存和二级缓存,一级缓存在Session中存在,二级缓存需要手动配置。

在一级缓存中,如果数据保存到数据库中后,而session又没有关闭的话,那么这些数据会放到缓存中,再次发出查询请求,Hibernate首先检查缓存中是否有该数据,如果找到该数据,那么就不会向数据库发起查询请求而是直接将缓存中的数据取出。请看下面的例子:

public class Main
{
public static void main(String[] args) throws Exception
{
Member member = (Member)HibernateSessionFactory.getSession().get(Member.class, 7);
System.out.println(member); Member member1 = (Member)HibernateSessionFactory.getSession().get(Member.class, 7);
System.out.println(member1);
}
}

上面的代码实际上只向数据库发起了一次查询请求:

Hibernate:
select
member0_.mid as mid0_0_,
member0_.age as age0_0_,
member0_.birthday as birthday0_0_,
member0_.name as name0_0_,
member0_.note as note0_0_,
member0_.salary as salary0_0_
from
hedb.member member0_
where
member0_.mid=?
Member [mid=7, age=22, birthday=2017-01-10, name=admin, note=Good person!, salary=22.22]
Member [mid=7, age=22, birthday=2017-01-10, name=admin, note=Good person!, salary=22.22]

这样的机制会大大提高查询效率。

但是!如果说现在要求你批量保存100000行记录呢?按照此时的道理来讲,这100000行记录都要缓存起来,这样明显会造成一个非常危险的举动,所以在进行实际的开发过程之中,必须要考虑数据的分批处理。

请看下面的代码:

     public static void main(String[] args) throws Exception
{
for (int x = 100; x < 10000; x++)
{
Member vo = new Member();
vo.setName("你好");
vo.setAge(20);
vo.setSalary(1000.0);
vo.setBirthday(new Date());
HibernateSessionFactory.getSession().save(vo);
if (x % 10 == 0)
{
// 每10条记录进行一次缓冲区的刷新
HibernateSessionFactory.getSession().flush();
HibernateSessionFactory.getSession().clear();
}
} HibernateSessionFactory.getSession().beginTransaction().commit();
}

上面用到了Session接口的flush()和clear()函数。

  • flush()是将缓存中的所有数据全部提交到数据库中,也就是将缓存中暂未保存到数据库的数据保存到数据库中。
  • clear()是将缓存全部清空。

Hibernate中一级缓存概念以及flush与clear的区别的更多相关文章

  1. JavaWeb_(Hibernate框架)Hibernate中一级缓存

    Hibernate中一级缓存 Hibernate 中的缓存分为一级缓存和二级缓存,这两个级别的缓存都位于持久化层,并且存储的都是数据库数据的备份.其中一级缓存是 Hibernate 的内置缓存,在前面 ...

  2. Hibernate中一级缓存和二级缓存使用详解

    一.一级缓存二级缓存的概念解释 (1)一级缓存就是Session级别的缓存,一个Session做了一个查询操作,它会把这个操作的结果放在一级缓存中,如果短时间内这个 session(一定要同一个ses ...

  3. Hibernate中一级缓存和二级缓存

    缓存是介于应用程序和物理数据源之间,其作用是为了降低应用程序对物理数据源访问的频次,从而提高了应用的运行性能.缓存内的数据是对物理数据源中的数据的复制,应用程序在运行时从缓存读写数据,在特定的时刻或事 ...

  4. Hibernate 中一级缓存和快照区的理解

    刚刚开始的时候觉得这个快照区很难理解,在网上看了很多博客之后,开始明白了.我是结合 ADO.NET 理解的,在ADO.NET 中有一个类, 叫 SqlCommandBuilder,在我看来,他就是 A ...

  5. hibernate(二)一级缓存和三种状态解析

    序言 前一篇文章知道了什么是hibernate,并且创建了第一个hibernate工程,今天就来先谈谈hibernate的一级缓存和它的三种状态,先要对着两个有一个深刻的了解,才能对后面我要讲解的一对 ...

  6. Hibernate之一级缓存和二级缓存

    1:Hibernate的一级缓存: 1.1:使用一级缓存的目的是为了减少对数据库的访问次数,从而提升hibernate的执行效率:(当执行一次查询操作的时候,执行第二次查询操作,先检查缓存中是否有数据 ...

  7. Hibernate 之 一级缓存

    本篇文章主要是总结Hibernate中关于缓存的相关内容. 先来看看什么是缓存,我们这里所说的缓存主要是指应用程序与物流数据源之间(例如硬盘),用于存放临时数据的内存区域,这样做的目的是为了减少应用程 ...

  8. (转)Hibernate的一级缓存

    http://blog.csdn.net/yerenyuan_pku/article/details/70148567 Hibernate的一级缓存 Hibernate的一级缓存就是指Session缓 ...

  9. Hibernate的一级缓存

    Hibernate的一级缓存 什么是缓存:缓存将数据库/硬盘上文件中数据,放入到缓存中(就是内存中一块空间).当再次使用的使用,可以直接从内存中获取 缓存的好处:提升程序运行的效率.缓存技术是Hibe ...

随机推荐

  1. Exp4 恶意代码分析 20164321 王君陶

    Exp4 恶意代码分析 20164321 王君陶 1.实践目标 1.1是监控你自己系统的运行状态,看有没有可疑的程序在运行. 1.2是分析一个恶意软件,就分析Exp2或Exp3中生成后门软件:分析工具 ...

  2. python 爬图 helloworld

    最近发现 吾志 上用户的头像都很个性,另外,对于没有把日记设为私密的用户,最后一天的日记是公开的,谁都可以查看. 所以,如果每天把所有可查看的日记爬一遍,那么-- 哈哈 以前对爬虫只是了解一点点,没有 ...

  3. Python面向对象(类的成员之属性)

    day24 类的成员之属性 class Foo(): def bar(self): print("bar") @property def per(self): ') return ...

  4. rocketmq学习

    官网地址 安装name server和broker git clone https://github.com/apache/incubator-rocketmq.git cd incubator-ro ...

  5. Youke365_2_4 一处Sql注入漏洞以及一处任意文件删除

    本文作者:X_Al3r Prat 0 自白 每一天都是新的一天.没啥吐槽的,步入正题 /system/category.php 文件一处Sql注入## 80-87行代码         $root_i ...

  6. 使用 spring.profiles.active 及 @profile 注解 动态化配置内部及外部配置

    引言:使用 spring.profiles.active 参数,搭配@Profile注解,可以实现不同环境下(开发.测试.生产)配置参数的切换 一.根据springboot的配置文件命名约定,结合ac ...

  7. Vue环境搭建及node安装过程整理

    一.nodejs的安装 Node.js安装包及源码下载地址为:https://nodejs.org/en/download/. 我们可以根据不同平台系统选择你需要的Node.js安装包.Node.js ...

  8. 安装vue后报错 bash: vue: command not found

    今天参照之前写的vue的环境搭建一个新的项目  http://www.cnblogs.com/stella1024/p/7570884.html 安装完vue,并提示成功: $ npm install ...

  9. Vim实用技巧系列 - 开篇

    作者使用Vim已经有一段时间了,深深觉得它是一个非常强大的编辑器,使用习惯之后效率很高.最大的缺点是学习曲线比较陡峭.因此作者希望分享一些自己在实际使用中的经验来帮助初学者,同时也帮助作者自己学习. ...

  10. Win7中安装EclipsePHP

    1. 安装WarmServer(一键式安装apache+php+mysql); 2. 将安装后的EclipsePHP工作目录workspace指向WarmServer安装目录下的www目录下即可 异常 ...