Hibernate中的批处理,实质上是对JDBC的批处理进行配置
要使用批处理插入数据,id生成策略不能是native策略,可以是uuid或者hilo
批量数据获取
属性:hibernate.jdbc.fetch_size
*MYSQL不支持,ORACLE支持
批量数据提交(极大的提高了批量执行的效率)
属性:hibernate.jdbc.batch_size
*MYSQL支持,ORACLE支持
步骤(理解):
1.id生成策略不能是native
[native依赖数据库生成id,每save()就会执行插入,否则无法生成id,所以无法进行批量插入]
可选策略:uuid/hilo 在内存中生成id,这样才能在commit的时候进行批量提交操作
2.关闭二级缓存,否则对象都被放入二级缓存中,有可能造成内存溢出,另外还影响速度
3.hibernate.cfg.xml中配置batch_size参数
4.MYSQL数据库需要修改url,加上 rewriteBatchedStatements=true
5.即时flush clear [及时清除一级缓存中的数据,每插入多少条记录便清除一次]
6.为了不影响批量插入的速度,关闭sql打印<property name="show_sql">false</property>
7.<property name="hibernate.jdbc.batch_size">50</property>
每50条进行一次批量插入,然后根据此参数在程序中定义清空缓存的时机
可设置为50的倍数,那么每插入4次后,就清空一次缓存,防止内存溢出
if(i%200==0) {
session.flush();//强制将内存中的持久化对象更新到数据库中
session.clear();//清空缓存中的持久化对象,防止内存溢出
}
package org.leadfar.hibernate.model; import java.util.Date; public class ContactPerson { private int id; private String name; private int age; private Date birthday; private Group group; private int versionNumber; public ContactPerson() { } public ContactPerson(String name) { this.name = name; } public ContactPerson(int id,String name) { this.id = id; this.name = name; } public ContactPerson(int id,int age,String name) { this.id = id; this.age = age; this.name = name; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Group getGroup() { return group; } public void setGroup(Group group) { this.group = group; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public int getVersionNumber() { return versionNumber; } public void setVersionNumber(int versionNumber) { this.versionNumber = versionNumber; } }
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="org.hibernate.auction"> <class name="org.leadfar.hibernate.model.ContactPerson" table="t_person"> <id name="id"> <!-- 批量插入数据,可以使用hilo策略(不依赖数据库生成id值)--> <generator class="hilo"/> </id> <!-- 版本标识,用于解决并发访问 --> <version name="versionNumber"></version> <property name="name"/> <property name="age"></property> <property name="birthday" type="date"></property> <many-to-one name="group" column="gid" fetch="join"></many-to-one> </class> </hibernate-mapping>
测试
public void save_person() throws Exception { Configuration cfg = new Configuration().configure(); SessionFactory sfactory = cfg.buildSessionFactory(); long begin = System.currentTimeMillis(); Session session = sfactory.openSession(); try { session.beginTransaction(); for(int i=0;i<100000;i++) { ContactPerson cp = new ContactPerson(); cp.setAge(1); cp.setName("x"); session.save(cp); if(i%200==0) { session.flush(); session.clear(); } } session.getTransaction().commit(); } catch(Exception e) { e.printStackTrace(); session.getTransaction().rollback(); } finally { session.close(); } long end = System.currentTimeMillis(); System.out.println("耗时:"+(end-begin)+"ms"); }
相关推荐
这包括设置Hibernate的配置文件(如hibernate.cfg.xml),以及创建SessionFactory。通常,我们会在测试类的setUp()方法中加载配置并创建SessionFactory。 2. **使用Hibernate annotations**:在实体类上使用...
#### 二、Hibernate 批处理配置 批处理是 Hibernate 中一种提高性能的方法,特别是在进行大量数据的插入、更新或删除时尤为明显。 - **默认行为** - 默认情况下,Hibernate 每次执行一条 SQL 语句后都会自动提交...
在Hibernate中,DTD(Document Type Definition)文件是用于定义XML文档结构的关键元素,它们为Hibernate配置文件提供语法规则和约束。当我们在Java项目中使用Hibernate时,会遇到`hibernate-dtd`文件,它是...
- **JDBC批量大小设置**:为了优化性能,需要在Hibernate配置文件中设置JDBC批量处理的大小。合理的数值通常介于10到50之间,例如: ```xml <property name="hibernate.jdbc.batch_size">20 ``` 这意味着每次向...
在使用Hibernate之前,需要进行相应的配置,包括数据库连接信息、实体类映射文件(hbm.xml)以及Hibernate配置文件(hibernate.cfg.xml)。这些配置信息定义了Hibernate如何与数据库进行通信,以及实体类与表之间的...
### Hibernate配置数据库连接知识点详解 #### 一、Hibernate简介与作用 Hibernate 是一款开源的对象关系映射(Object Relational Mapping, ORM)框架,用于 Java 应用程序与关系型数据库之间的交互。它允许开发者以...
由于没有提供具体的描述,我们将基于常见的Hibernate配置流程进行阐述。 **一、Hibernate简介** Hibernate是一个对象关系映射(ORM)框架,它通过在Java对象和数据库记录之间建立映射关系,使得开发人员能够用面向...
这种映射关系通常定义在Hibernate的配置文件(hibernate.cfg.xml)和实体类(Entity)中。 2. **Configuration类**:Hibernate的初始化工作主要由Configuration类完成,它负责读取配置文件,建立SessionFactory,...
- **SessionFactory**:基于配置文件创建,是线程安全的,整个应用只需要一个SessionFactory实例。 - **Session**:每次数据库操作应使用SessionFactory创建Session,它是短生命周期的,每个数据库操作(比如查询...
3. **配置文件**:`hibernate.cfg.xml`是Hibernate的主配置文件,其中定义了数据库连接参数、实体扫描路径、缓存设置等。 4. **对象关系映射**:Hibernate通过XML映射文件(或使用注解)将Java类与数据库表对应起来...
1. **配置**:设置Hibernate的配置文件(hibernate.cfg.xml),包含数据库连接信息、方言、缓存策略等。此外,还需要定义实体类与数据库表的映射,通常通过Hibernate的注解或XML映射文件完成。 2. **实体类与表映射...
3. **配置Hibernate**:创建`hibernate.cfg.xml`配置文件,配置数据库连接信息,如驱动、URL、用户名和密码等。 4. **映射文件**:为每个Java实体类创建对应的`.hbm.xml`映射文件,定义对象与数据库表之间的关系。 5...
最后,视频可能还会涉及性能优化,如二级缓存的配置、批处理操作的使用、懒加载和立即加载的策略等,帮助开发者更好地理解和应用Hibernate。 通过这个详尽的视频教程,初学者可以系统地学习Hibernate的配置与使用,...
这包括了如何创建Hibernate的配置文件(hibernate.cfg.xml),设置JDBC连接参数,指定数据源,以及加载映射文件等。此外,还涵盖了如何使用SessionFactory和Session对象,它们是Hibernate操作数据库的核心组件。 ...
在描述中提到,这些代码示例不是基于XML配置,而是使用jar文件来运行,这意味着我们将探讨如何在没有传统Hibernate配置文件的情况下进行程序化配置。以下是围绕这个主题的详细知识点: 1. **Hibernate简介**:...
该项目是一款基于Shiro、Spring和Hibernate的Java企业级项目初始化模板,包含201个文件,涵盖145个Java源代码文件、20个YAML配置文件、11个SQL脚本文件、7个XML配置文件、3个批处理文件、3个PNG图像文件、2个文本...
2. **环境配置**:讲解如何配置Hibernate所需的环境,包括JDK、数据库、IDE等,以及编写基本的hibernate.cfg.xml配置文件。 3. **实体映射**:详述如何使用Hibernate的XML映射文件(hbm.xml)或注解来定义Java类与...
2. **安装与配置**:文档会详述如何在项目中集成Hibernate 3.6,包括添加必要的库依赖、配置Hibernate的主配置文件(hibernate.cfg.xml)以及实体类的映射文件(.hbm.xml)。 3. **对象关系映射**:Hibernate的核心...