`
schy_hqh
  • 浏览: 558021 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Hibernate基于配置文件(二十)Hibernate进行批处理

 
阅读更多

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的配置文件(如hibernate.cfg.xml),以及创建SessionFactory。通常,我们会在测试类的setUp()方法中加载配置并创建SessionFactory。 2. **使用Hibernate annotations**:在实体类上使用...

    hibernate的查询方式介绍和hibernate的批处理和连接池配置hibernate

    #### 二、Hibernate 批处理配置 批处理是 Hibernate 中一种提高性能的方法,特别是在进行大量数据的插入、更新或删除时尤为明显。 - **默认行为** - 默认情况下,Hibernate 每次执行一条 SQL 语句后都会自动提交...

    hibernate-dtd文件

    在Hibernate中,DTD(Document Type Definition)文件是用于定义XML文档结构的关键元素,它们为Hibernate配置文件提供语法规则和约束。当我们在Java项目中使用Hibernate时,会遇到`hibernate-dtd`文件,它是...

    Hibernate批量处理

    - **JDBC批量大小设置**:为了优化性能,需要在Hibernate配置文件中设置JDBC批量处理的大小。合理的数值通常介于10到50之间,例如: ```xml &lt;property name="hibernate.jdbc.batch_size"&gt;20 ``` 这意味着每次向...

    Hibernate 基于持久层框架的DAO模式应用

    在使用Hibernate之前,需要进行相应的配置,包括数据库连接信息、实体类映射文件(hbm.xml)以及Hibernate配置文件(hibernate.cfg.xml)。这些配置信息定义了Hibernate如何与数据库进行通信,以及实体类与表之间的...

    Hibernate配置数据库连接

    ### Hibernate配置数据库连接知识点详解 #### 一、Hibernate简介与作用 Hibernate 是一款开源的对象关系映射(Object Relational Mapping, ORM)框架,用于 Java 应用程序与关系型数据库之间的交互。它允许开发者以...

    Hibernate配置

    由于没有提供具体的描述,我们将基于常见的Hibernate配置流程进行阐述。 **一、Hibernate简介** Hibernate是一个对象关系映射(ORM)框架,它通过在Java对象和数据库记录之间建立映射关系,使得开发人员能够用面向...

    hibernate_3.2官方开发包

    这种映射关系通常定义在Hibernate的配置文件(hibernate.cfg.xml)和实体类(Entity)中。 2. **Configuration类**:Hibernate的初始化工作主要由Configuration类完成,它负责读取配置文件,建立SessionFactory,...

    hibernate相关配置.rar

    - **SessionFactory**:基于配置文件创建,是线程安全的,整个应用只需要一个SessionFactory实例。 - **Session**:每次数据库操作应使用SessionFactory创建Session,它是短生命周期的,每个数据库操作(比如查询...

    hibernate3必要jar包

    3. **配置文件**:`hibernate.cfg.xml`是Hibernate的主配置文件,其中定义了数据库连接参数、实体扫描路径、缓存设置等。 4. **对象关系映射**:Hibernate通过XML映射文件(或使用注解)将Java类与数据库表对应起来...

    hibernate aip hibernate aip

    1. **配置**:设置Hibernate的配置文件(hibernate.cfg.xml),包含数据库连接信息、方言、缓存策略等。此外,还需要定义实体类与数据库表的映射,通常通过Hibernate的注解或XML映射文件完成。 2. **实体类与表映射...

    Hibernate3的依赖包

    3. **配置Hibernate**:创建`hibernate.cfg.xml`配置文件,配置数据库连接信息,如驱动、URL、用户名和密码等。 4. **映射文件**:为每个Java实体类创建对应的`.hbm.xml`映射文件,定义对象与数据库表之间的关系。 5...

    hibernate的配置视频 讲解非常详细

    最后,视频可能还会涉及性能优化,如二级缓存的配置、批处理操作的使用、懒加载和立即加载的策略等,帮助开发者更好地理解和应用Hibernate。 通过这个详尽的视频教程,初学者可以系统地学习Hibernate的配置与使用,...

    Hibernate实战

    这包括了如何创建Hibernate的配置文件(hibernate.cfg.xml),设置JDBC连接参数,指定数据源,以及加载映射文件等。此外,还涵盖了如何使用SessionFactory和Session对象,它们是Hibernate操作数据库的核心组件。 ...

    hibernate代码

    在描述中提到,这些代码示例不是基于XML配置,而是使用jar文件来运行,这意味着我们将探讨如何在没有传统Hibernate配置文件的情况下进行程序化配置。以下是围绕这个主题的详细知识点: 1. **Hibernate简介**:...

    基于Shiro、Spring、Hibernate的Java企业级项目初始化模板设计源码

    该项目是一款基于Shiro、Spring和Hibernate的Java企业级项目初始化模板,包含201个文件,涵盖145个Java源代码文件、20个YAML配置文件、11个SQL脚本文件、7个XML配置文件、3个批处理文件、3个PNG图像文件、2个文本...

    精通Hibernate:Java持久化对象技术详解[第二版]

    2. **环境配置**:讲解如何配置Hibernate所需的环境,包括JDK、数据库、IDE等,以及编写基本的hibernate.cfg.xml配置文件。 3. **实体映射**:详述如何使用Hibernate的XML映射文件(hbm.xml)或注解来定义Java类与...

    hibernate 3.6 中文 chm

    2. **安装与配置**:文档会详述如何在项目中集成Hibernate 3.6,包括添加必要的库依赖、配置Hibernate的主配置文件(hibernate.cfg.xml)以及实体类的映射文件(.hbm.xml)。 3. **对象关系映射**:Hibernate的核心...

Global site tag (gtag.js) - Google Analytics