Hibernate中一级缓存概念以及flush与clear的区别
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的区别的更多相关文章
- JavaWeb_(Hibernate框架)Hibernate中一级缓存
Hibernate中一级缓存 Hibernate 中的缓存分为一级缓存和二级缓存,这两个级别的缓存都位于持久化层,并且存储的都是数据库数据的备份.其中一级缓存是 Hibernate 的内置缓存,在前面 ...
- Hibernate中一级缓存和二级缓存使用详解
一.一级缓存二级缓存的概念解释 (1)一级缓存就是Session级别的缓存,一个Session做了一个查询操作,它会把这个操作的结果放在一级缓存中,如果短时间内这个 session(一定要同一个ses ...
- Hibernate中一级缓存和二级缓存
缓存是介于应用程序和物理数据源之间,其作用是为了降低应用程序对物理数据源访问的频次,从而提高了应用的运行性能.缓存内的数据是对物理数据源中的数据的复制,应用程序在运行时从缓存读写数据,在特定的时刻或事 ...
- Hibernate 中一级缓存和快照区的理解
刚刚开始的时候觉得这个快照区很难理解,在网上看了很多博客之后,开始明白了.我是结合 ADO.NET 理解的,在ADO.NET 中有一个类, 叫 SqlCommandBuilder,在我看来,他就是 A ...
- hibernate(二)一级缓存和三种状态解析
序言 前一篇文章知道了什么是hibernate,并且创建了第一个hibernate工程,今天就来先谈谈hibernate的一级缓存和它的三种状态,先要对着两个有一个深刻的了解,才能对后面我要讲解的一对 ...
- Hibernate之一级缓存和二级缓存
1:Hibernate的一级缓存: 1.1:使用一级缓存的目的是为了减少对数据库的访问次数,从而提升hibernate的执行效率:(当执行一次查询操作的时候,执行第二次查询操作,先检查缓存中是否有数据 ...
- Hibernate 之 一级缓存
本篇文章主要是总结Hibernate中关于缓存的相关内容. 先来看看什么是缓存,我们这里所说的缓存主要是指应用程序与物流数据源之间(例如硬盘),用于存放临时数据的内存区域,这样做的目的是为了减少应用程 ...
- (转)Hibernate的一级缓存
http://blog.csdn.net/yerenyuan_pku/article/details/70148567 Hibernate的一级缓存 Hibernate的一级缓存就是指Session缓 ...
- Hibernate的一级缓存
Hibernate的一级缓存 什么是缓存:缓存将数据库/硬盘上文件中数据,放入到缓存中(就是内存中一块空间).当再次使用的使用,可以直接从内存中获取 缓存的好处:提升程序运行的效率.缓存技术是Hibe ...
随机推荐
- day103 跨域请求 与频率访问限制.
目录 一.跨域请求 二.频率访问限制 一 .同一个域下的ajax请求访问 url文件 from django.conf.urls import url from django.contrib imp ...
- 2017 NAIPC A:Pieces of Parentheses
my team solve the problem in the contest with similar ideathis is a more deep analysis The main idea ...
- 用redis统计大量用户的登陆情况[只判断是否活跃]
有这样的一个场景需求:有上亿的用户,要统计这批用户的登陆情况,例如一周连续登陆,连续三天是是否登陆,一周活跃天数等用户 存在的挑战 数据如何尽可能用小的空间存储 如何能快速获取指定的数据 如果使用文件 ...
- MySQL(存储过程,支持事务操作)
day61 保存在MySQL上的一个别名 > 一坨SQL语句 -- delimiter // -- create procedure p1() -- BEGIN -- select * ...
- Access 2010 应用基础 单元三:SQL查询
导语:Access查询中拉差距的部分 简单查询 [是基于单个表的查询] 无条件从数据表中选择部分字段 Select 字段列表 from 数据表 无条件从数据表中选择全部字段 Select 字段列表 f ...
- webpack快速入门——CSS进阶,Less文件的打包和分离
1.要使用less,首先使用npm安装less服务 cnpm install less --save-dev 还需要安装Less-loader用来打包使用. cnpm install less-loa ...
- vue学前班004(基础指令与使用技巧)
我学vue 的最终目的是为了 做apicloud 和vue 的开发 作为配合apicloud的前端框架使用 所以项目用不到的会暂时不介绍. (强烈建议 官网案例走一遍) 基础指令的学习(结合aui ...
- Alamofire源码导读二:发起请求及内部加锁的逻辑
以创建一个 DataRequest 为例子  发起请求 创建 SessionManager 顺带也创建了一个 SessionDelegate 持有一个urlSession,持有一个串行的 Dispa ...
- 把本地git仓库的项目上传到远程仓库
之前在学校实验室服务器上建了一个git远程仓库,存放我写的express项目代码.后来由于出去实习,就无法访问那个远程仓库了,因为它在校园网内. 还好我的笔记本中有这个项目完整的本地仓库,于是我就试着 ...
- Ubuntu 连接手机 不识别设备 -- 解决办法
1.usb线连接手机,输入命令 $ lsusb Bus 004 Device 002: ID 8087:8000 Intel Corp. Bus 004 Device 001: ID 1d6b:000 ...