`
周一Monday
  • 浏览: 346393 次
  • 来自: 北京
社区版块
存档分类
最新评论

Hibernate的批量处理

阅读更多
package org.monday.app;

import org.hibernate.Session;
import org.hibernate.Transaction;
import org.monday.domain.User;
import org.monday.util.HibernateUtil;

public class UserManager {

	public static void main(String[] args) {
		// batchInsert();
		// batchUpdate();
		batchDelete();
	}

	/**
	 * 批量添加
	 */
	public static void batchInsert() {
		Session session = HibernateUtil.getSession();
		Transaction tx = session.beginTransaction();
		for (int i = 1,n=10000; i <= n; i++) {
			User u = new User();
			u.setName("sql" + i);
			session.save(u); 	 // save

			if (i % 20 == 0) {
				session.flush(); // 将Session缓存的数据写入到数据库
				session.clear(); // 手动清空Session缓存
			}
		}
		tx.commit();
		HibernateUtil.closeSession();
		System.out.println("ok");
		
		/**
		 * <!-- 关闭Hibernate的二级缓存 -->
		   <property name="hibernate.cache.use_second_level_cache">false</property>
		      除了Session的缓存要关闭外,最好将SessionFactory的二级缓存也关闭了
		 */
	}

	/**
	 * 批量更新
	 */
	public static void batchUpdate() {
		Session session = HibernateUtil.getSession();
		Transaction tx = session.beginTransaction();
		String hql = "update User set name = ? where id<=?";
		int count = session.createQuery(hql).setParameter(0, "hql").setParameter(1, 10).executeUpdate();
		tx.commit();
		HibernateUtil.closeSession();
		System.out.println("update:" + count);
	}

	/**
	 * 批量删除
	 */
	public static void batchDelete() {
		Session session = HibernateUtil.getSession();
		Transaction tx = session.beginTransaction();
		String hql = "delete from User where id<=?";
		int count = session.createQuery(hql).setParameter(0, 10).executeUpdate();
		tx.commit();
		HibernateUtil.closeSession();
		System.out.println("delete:" + count);
	}
}

 

package org.monday.util;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtil {

	/** 声明SessionFactory对象 */
	private static final SessionFactory sf;

	/**
	 * 静态块创建SessionFactory对象
	 */
	static {
		try {
			Configuration cfg = new Configuration().configure();
			sf = cfg.buildSessionFactory();
		} catch (Throwable e) {
			System.out.println("创建SessionFactory失败");
			throw new ExceptionInInitializerError(e);
		}
	}

	/** 声明ThreadLocal对象绑定Session */
	private static final ThreadLocal<Session> session = new ThreadLocal<Session>();

	/**
	 * 获取Session
	 * 
	 * @return 当前邦定到ThreadLocal的Session
	 * @throws HibernateException
	 */
	public static Session getSession() throws HibernateException {
		Session s = session.get();
		if (s == null) {
			s = sf.openSession();
			session.set(s);
		}
		return s;
	}

	/**
	 * 关闭Session
	 * 
	 * @throws HibernateException
	 */
	public static void closeSession() throws HibernateException {
		Session s = session.get();
		if (s != null) {
			s.close();
		}
		session.set(null);
	}
}

 

分享到:
评论

相关推荐

    Hibernate批量处理

    ### Hibernate批量处理详解 #### 一、批量处理概述 Hibernate作为一种强大的对象关系映射(ORM)框架,提供了多种批量处理的方式以提高数据处理效率。批量处理对于需要在短时间内处理大量数据的应用尤其重要,如...

    Hibernate批量处理数据

    ### Hibernate批量处理数据 #### 一、概述 Hibernate作为一款流行的Java持久层框架,它能够以面向对象的方式处理数据库操作,极大地简化了开发过程。然而,在处理大量数据时,如果仍然采用逐条处理的方式,将会...

    Hibernate批量处理海量数据的方法

    以下是针对Hibernate批量处理海量数据的一些关键知识点和优化策略: 1. **理解Hibernate的工作原理**:Hibernate通过查询数据库获取数据,并将其转化为Java对象存储在内存中,这种做法在处理小量数据时非常便捷,但...

    Hibernate下数据批量处理解决方案

    在Java开发中,尤其是涉及到大数据量的处理时,人们往往会质疑ORM框架,如Hibernate,是否适合进行批量数据操作。然而,实际上,通过适当的技术手段,我们可以有效地解决Hibernate在批量处理时可能出现的性能问题。...

    在Hibernate中处理批量更新和批量删除

    本文将深入探讨在Hibernate中处理批量更新和批量删除的策略,以及如何优化这些操作,以提高数据库操作的效率。 ### 批量更新的常规方法 在Hibernate中,最直观的批量更新方式是通过循环遍历查询结果集,并对每个...

    hibernate批量删除

    ### Hibernate批量删除详解 #### 背景与概念 在Java开发中,处理大量数据时,经常需要执行批量操作,如批量更新或批量删除。这些操作对于提高应用程序性能至关重要,尤其是在涉及成千上万条记录的情况下。...

    在Hibernate应用中处理批量更新和批量删除

    在Hibernate应用中处理批量更新和批量删除时,开发者应充分考虑数据库性能和资源消耗,合理利用Hibernate提供的高级功能和JDBC API,以及数据库自身的特性,以实现高效、稳定的批量数据处理。通过上述策略的应用,...

    hibernate批量操作实例详解

    【hibernate批量操作实例详解】 批量操作是提高数据库处理效率的重要手段,特别是在处理大量数据时,能够显著提升性能并减少资源消耗。在Hibernate中,批量操作主要包括批量插入、批量更新和批量删除。以下是对这些...

    Hibernate中大量数据的更新

    Hibernate 提供了两种批量更新机制:一级缓存(First-Level Cache)和批量抓取(Batching)。 一级缓存 Hibernate 的一级缓存是指 Session 对象中缓存的所有对象。在批量更新时,如果不及时清除一级缓存,可能会...

    jsp Hibernate批量更新和批量删除处理代码

    ### Hibernate批量更新 Hibernate在执行批量更新操作时,通常会先加载所有符合条件的实体到内存中,然后逐个更新每个实体对象的状态,之后再将这些状态变化同步到数据库中。这会导致大量的内存占用和数据库访问,...

    struts2 hibernate spring 整合批量删除源码

    总的来说,这个批量删除源码示例展示了如何利用Struts2处理HTTP请求,Spring管理依赖,以及Hibernate与数据库交互,是学习和理解三大框架整合开发的一个实践案例。通过分析和理解这段代码,开发者可以提升自己在企业...

    JSF+hibernate实现批量删除

    本篇文章将详细探讨如何利用JSF与Hibernate相结合来实现批量删除功能,以及在CRUD(创建、读取、更新和删除)操作中的应用。 首先,我们需要理解JSF的工作原理。JSF是一个基于组件的MVC(Model-View-Controller)...

    jsp Hibernate批量更新和批量删除处理代码.docx

    本文件主要探讨了如何使用Hibernate进行批量更新和批量删除处理,这些操作在处理大量数据时尤其重要,因为它们可以显著提高应用的性能。下面我们将深入解析这两个主题。 批量更新在Hibernate中通常涉及在一个事务中...

    彻底解决hibernate常见难点.zip

    Hibernate处理1-N关系时保存技巧、Hibernate缓存机制、Hibernate批量处理数据、Hibernate三种继承映射策略、hibernate映射体系、Hibernate主键生成策略、持久层DAO设计建议、基于xml文件的bean、使用HibernateAPI在...

    2022年Hibernate下数据批量处理Java教程.docx

    Hibernate 下数据批量处理 Java 教程 本文主要介绍了使用 Hibernate 实现数据批量处理的方法和注意事项。在 Java 中,对数据批量处理的需求非常重要,但许多人对 Java 是否适合批量处理持有怀疑念头。实际上,如果...

    Hibernate笔记

    【Hibernate批量处理】 批量处理能提高数据操作效率,减少数据库交互次数。在Hibernate中,批量处理主要包括插入和更新。 A. 批量插入 批量插入时,可以使用for循环来创建和保存对象,为了防止内存溢出,可以在...

    浅析Hibernate下数据批量处理方法.doc

    标题"浅析Hibernate下数据批量处理方法"和描述中提到,早期的Hibernate在批量插入时可能存在效率问题,但最新版本已经进行了优化,例如通过设置`batch_size`参数来提高批量处理的性能。`batch_size`设置的是JDBC...

    hibernate批量删除.txt

    ### Hibernate 批量删除知识点详解 #### 一、概述 在进行数据库操作时,经常会遇到需要批量处理数据的情况,例如批量更新或批量删除等。利用Hibernate框架可以方便地实现这些功能,提高开发效率并减少资源消耗。...

    C#Hibernate数据库海量读写快速存储

    1. 批量操作:在处理大量数据时,避免单条插入或更新,应采用批量处理,将多条数据一次性提交,以减少网络通信和数据库事务开销。 2. 数据分片:将大数据分散到多个数据库或表中,通过分布式处理提高读写速度。 3. ...

    Java中Hibernate的批量插入

    针对这种情况,Hibernate提供了一些批量处理的解决方案。 批量插入是处理大量数据插入的一种有效方法。通常,初学者可能会尝试一次性创建大量对象并调用Session的save()方法来保存,但这会导致所有对象被存储在...

Global site tag (gtag.js) - Google Analytics