hibernate执行批量操作

一、使用HQL执行批量操作

注意:插入数据时:只支持INSERT INTO ... SELECT ...形式,不支持INSERT INTO ... VALUES ...形式.

下面是一个增删改的批量操作实例:

package com.ru.service;

import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;

import com.ru.domain.Classes;
import com.ru.utils.HqlUtil;

public class hqlBatch {
	
	HqlUtil hu=new HqlUtil();
	Session session=null;
	Transaction tx=null;
	//增删改都要执行session.createQuery(hql).executeUpdate()
	//hql批量更新数据库,执行时值执行一跳语句
	@Test
	public  void update(){
		try {
			session=hu.currentSession();
			tx=session.beginTransaction();
			String hql="update Classes c set c.name=? where c.id<?";
			String[] parameters={"如123",10000+""};
			session.createQuery(hql).setString(0, parameters[0]).setString(1, parameters[1]).executeUpdate();
			tx.commit();
		} catch (Exception e) {
		
			e.printStackTrace();
		}finally{
			hu.closeSession();
		}
	}
	//hql批量删除数据库,执行时值执行一跳语句
		@Test
		public  void delete(){
			try {
				session=hu.currentSession();
				tx=session.beginTransaction();
				String hql="delete from Classes  c where c.id<?";
				String[] parameters={10000+""};
				session.createQuery(hql).setString(0, parameters[0]).executeUpdate();
				tx.commit();
			} catch (Exception e) {
			
				e.printStackTrace();
			}finally{
				hu.closeSession();
			}
		}
		//hql批量添加数据库数据,执行时值执行一跳语句
		//hql批量添加数据必须使用insert into  tablenaem(字段名) select 。。。。后面是子查询语句
				@Test
				public  void save(){
					try {
						session=hu.currentSession();
						tx=session.beginTransaction();
						String hql="insert into Student(name) select name from Classes where name='如123'   ";
						
						session.createQuery(hql).executeUpdate();
						tx.commit();
					} catch (Exception e) {
					
						e.printStackTrace();
					}finally{
						hu.closeSession();
					}
				}
}

 

二、通过session进行批量操作

 

 

package com.ru.service;

import static org.junit.Assert.*;

import org.hibernate.ScrollMode;
import org.hibernate.ScrollableResults;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;

import com.ru.domain.Classes;
import com.ru.domain.Student;
import com.ru.utils.HqlUtil;

public class hql_session {
	HqlUtil hu=new HqlUtil();
	Session session=null;
	Transaction tx=null;
	//批量添加数据
	@Test
	public void save() {
		try {
			session=hu.currentSession();
			tx=session.beginTransaction();
			for(int i=0; i<1000;i++){
				Classes clazz=new Classes();
				clazz.setName("如");
				session.save(clazz);
				if(i%20==0){//每加20条数据运行一次
					System.out.println("清理缓存");
					session.flush();//清理缓存
					System.out.println("清理缓存中的sru对象");
					session.clear();//清理缓存中的sru对象。
				}
			}
			tx.commit();
		} catch (Exception e) {
		
			e.printStackTrace();
		}finally{
			hu.closeSession();
		}
		
	}
	//批量更新数据
	@Test
	public void update() {
		try {
			session=hu.currentSession();
			tx=session.beginTransaction();
			//使用滚动结果集接收数据信息
			ScrollableResults clazzs=session.createQuery("from Classes").scroll(ScrollMode.FORWARD_ONLY);
			//
			int count=0;
			while(clazzs.next()){
				//每次只去一条记录
				Classes clazz=(Classes)clazzs.get(0);
				clazz.setName("如哥");
				if(++count%20==0){
					//清除缓存
					session.flush();
					session.clear();//清楚clazz对象
				}
			}
			
			tx.commit();
		} catch (Exception e) {
		
			e.printStackTrace();
		}finally{
			hu.closeSession();
		}
		
	}


}


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值