在itoo中。基本上每一个系统都有一个导入功能,大量的数据填写进入excel模板中。然后使用导入功能导入的数据库中,这样能够大大的提高工作效率。

那么导入就涉及到了批量保存数据库的问题了。

那么通常情况下,在一个Session对象的缓存中数量有限的持久化对象,等到Session对象处理事务完成,还要关闭Session对象,从而及时释放session的缓存占用的内存。在批量保存1万条数据,假设一次性把须要保存的1万条数据载入到内存职工,当运行事务提交的时候,就会清理缓存,hibernate运行1万条更新语句。

这样更新的方式有两个缺点:

(1)占用大量内存。必须把1万条载入到内存中,然后一一更新它们。

(2)运行的update数目过多,每一个update语句仅仅能更新一条数据,必须通过1万条update语句才干更新1万条数据。频繁地訪问数据库,会大大减少应用的性能。

对于以上的情况。咱们能够通过Session来进行批量操作。Session
的sava方法都会把处理对象的存放在自己的缓存职工,假设通过一个Session对象来处理大量持久化对象,应该及时从缓存中清空已经处理完成而且不会在訪问的对象。

详细的做法就是处理完一个对象或者小批量对象后,立马调用Flush()方法清理缓存,然后再调用Clear()方法清空缓存。

假设通过Session来进行批量操作,会受到下面的约束:

1.须要在hibernate的配置文件里设置JDBC单次批量处理的数目。合理的取值通常为10~50,比如hibernate.jdbc.batch_size=30;这样设置的。就须要保证每次像数据库发送的批量SQL语句数目与这个batch_size属性一致。

2.假设操作对象採用"identity"标识符生成器,则Hibernate无法在JDBC层进行批量插入操作。

3.进行批量操作时。建议关闭hibernate的第二级缓存。Session的缓存为hibernate的第一级缓存,通常它是事务范围内的缓存。每一个事务都有单独的第一级缓存。

SessionFactory的外置缓存为Hibernate的第二级荤菜,它是应用范围内的缓存,全部的事务都共享同一个第二级缓存。在不论什么情况下,hibernate的第一级缓存总是可用的,在默认情况下。hibernate的第二级缓存是关闭的。可是也能够在hibernate的配置文件里手动关闭二级缓存:

Hibernate.cache.use_second_level_cache=false;

在itoo中批量保存的代码例如以下:

<span style="font-family:FangSong_GB2312;font-size:18px;">/**
* 批量保存
*
* @param list
* list类型
* @return 返回boolean值
*/
public <T> boolean saveEntitys(List<T> list) {
boolean flag = false;
int batchSize = 30;
int i = 0;
getDataBaseName(list.get(0));
try {
for (Object entity : list) {
getEntityManager().persist(entity);
i++;
if (i % batchSize == 0) {
getEntityManager().flush();
getEntityManager().clear();
}
}
flag = true;
} catch (Exception e) { }
return flag;
}</span>

在以上的程序中,每次运行session.flush()方法,就会向数据库职工批量插入30条记录。接下来session.clear()方法把20个刚保存的对象从缓存中清空。

仅仅要是设计有批量导入的情况,都会涉及到批量保存的内容,这篇博客就是让你的批量保存达到最优效果。

【java】itoo项目实战之hibernate 批量保存优化的更多相关文章

  1. 【java】itoo项目实战之hibernate 懒载入优化性能

    在做itoo 3.0 的时候,考评系统想要上线,就開始导入数据了,仅仅导入学生2万条数据,可是导入的速度特别的慢.这个慢的原因是由于导入的时候进行了过多的IO操作.可是导入成功之后,查询学生的速度更加 ...

  2. 【java】itoo项目实战之大数据查询之使用 new map 优化hibernate之级联查询

    在我的上一篇博客<[java]itoo项目实战之hibernate 懒载入优化性能>中,我曾提到过学生数据有2万条,查询数据十分的慢,这是让人非常受不了的事情.看着页面进度条一直转着圈圈, ...

  3. Java Web项目实战第1篇之环境搭建

    写在前面的话 从今天开始一个Java Web实战项目,参考自 http://blog.csdn.net/eson_15/article/details/51277324 这个博客(非常感谢博主的分享精 ...

  4. Java高级项目实战03:CRM系统数据库设计

    接上一篇:Java高级项目实战02:客户关系管理系统CRM系统模块分析与介绍 欢迎点击回顾,接下来我们说说 CRM系统数据库设计. 我们根据产品的原型搞以及UI组的设计稿, 接下来就要设计数据库, 一 ...

  5. Java高级项目实战02:客户关系管理系统CRM系统模块分析与介绍

    本文承接上一篇:Java高级项目实战之CRM系统01:CRM系统概念和分类.企业项目开发流程 先来CRM系统结构图: 每个模块作用介绍如下: 1.营销管理 营销机会管理:针对企业中客户的质询需求所建立 ...

  6. Java Drp项目实战——Servlet

    由来 在解说Servlet之前须要先介绍一个词语CGI即Common GatewayInterface是通用网关接口的意思.它提供一个计算机程序同HTTP协议或者WWW服务的接口,也就是人机交互接口的 ...

  7. Java爬虫项目实战(一)

    目的: 通过网络爬虫爬取中国最小粒度的区域维度信息,包括省(Province) .市(City).县(County).镇(town).村委会(village) 主网站链接: http://www.st ...

  8. JAVA Drp项目实战—— Unable to compile class for JSP 一波三折

    交代下背景.电脑系统是64位的,用的是64位的Tomcat.安装是32位的Myeclipse10,java环境也是32位的.Tomcat在開始启动时会报这样一个错误,"Can't load ...

  9. Java Drp项目实战—— 环境搭建

    概要 我们要開始一个关于Java项目的开发,那么我们就须要搭建一个关于Java开发的环境,那么搭建一个Java开发环境,都须要些什么东东,又有些什么注意事项呢. 过程 我先将我搭建Java环境的软件和 ...

随机推荐

  1. Linux基础命令详解-1

    本篇详解的命令有以下30个 1.cd 功能:切换工作目录 参数列表     2.ls 功能:查看目录里的内容 参数列表     3.mv 功能:  移动或重命名文件和目录 参数列表     4.pwd ...

  2. Python第三方库之openpyxl(6)

    Python第三方库之openpyxl(6) 折线图 折线图允许在固定轴上绘制数据,它们类似于散列图,主要的区别在于,在折线图中,每个数据序列都是根据相同的值绘制的,不同的轴可以用于辅助轴,与条形图类 ...

  3. x86实模式到保护模式 李忠 王晓波

    x86实模式到保护模式  李忠 王晓波 第3到4章 各个进制间的转换省略 实验环境 编译器  nasm 虚拟机 virtual box 小程序  hexview   观察编译后的机器代码 fixvhd ...

  4. GDB使用例子

    GDB使用例子 一般来说GDB主要调试的是C/C++的程序.要调试C/C++的程序,首先在编译时,我们必须要把调试信息加到可执行文件中.使用编译器(cc/gcc/g++)的 -g 参数可以做到这一点. ...

  5. Course Machine Learning Note

    Machine Learning Note Introduction Introduction What is Machine Learning? Two definitions of Machine ...

  6. Non-maximum suppression(非极大值抑制算法)

    在RCNN系列目标检测中,有一个重要的算法,用于消除一些冗余的bounding box,这就是non-maximum suppression算法. 这里有一篇博客写的挺好的: http://www.c ...

  7. “玲珑杯”ACM比赛 Round #11 " ---1097 - 萌萌哒的第二题

    1097 - 萌萌哒的第二题 题意:中文题好像没有必要说题意了吧.. 思路:我们知道由于运输桥不能交叉,所以从右往左所修建的桥的序号是严格单增的.但是每个工厂B有6种选择,只能选一个求最多能建造几座桥 ...

  8. 九度oj 题目1207:质因数的个数

    题目描述: 求正整数N(N>1)的质因数的个数. 相同的质因数需要重复计算.如120=2*2*2*3*5,共有5个质因数. 输入: 可能有多组测试数据,每组测试数据的输入是一个正整数N,(1&l ...

  9. nginx,lvs,haproxy负载均衡对比

    Nginx/LVS/HAProxy是目前使用最广泛的三种负载均衡软件,一般对负载均衡的使用是随着网站规模的提升根据不同的阶段来使用不同的技术,具体的应用需求还得具体分析. 如果是中小型的Web应用,比 ...

  10. hdu 4965 矩阵快速幂 矩阵相乘性质

    Fast Matrix Calculation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Jav ...