Hibernate学习笔记----Session管理和批量操作

本文介绍了Hibernate中Session的两种管理方式:通过外部传入Session对象和内部获取与当前线程绑定的Session对象,并讨论了各自的优缺点。同时,还探讨了如何在Hibernate中使用JDBC原生API进行批处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.Session管理

DepartmentDao.java

package cn.limbo.hibernate.dao;

import org.hibernate.Session;

import cn.limbo.hibernate.entities.Department;
import cn.limbo.hibernate.util.HibernateUtils;

public class DepartmentDao {

	/**
	 * 若需要传入一个Session对象,则意味着上一层(Service)需要获取到Session对象,
	 * 这说明上一层需要和Hibernate的API紧密耦合,所以不推荐使用这种方式
	 * @param session
	 * @param department
	 */
	public void save(Session session,Department department)
	{
		session.save(department);
	}
	
	/**
	 * 内部获取Session对象,获取和当前线程绑定的Session对象
	 * 1.不许哟啊外部传入Session对象,
	 * 2.多个DAO方法可以使用一个事务
	 * @param department
	 */
	public void save(Department department)
	{
		Session session = HibernateUtils.getInstance().getSession();
		System.out.println(session.hashCode());
		session.save(department);
	}
	
}

HibernateUtils.java

package cn.limbo.hibernate.util;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;

public class HibernateUtils {
	
	private SessionFactory sessionFactory;
	private static HibernateUtils INSTANCE;
	
	private HibernateUtils(){}
	
	public static HibernateUtils getInstance()
	{
		if(INSTANCE == null)
			INSTANCE = new HibernateUtils();
		return INSTANCE;
	}
	
	public SessionFactory getSessionFactory()
	{
		if(sessionFactory == null)
		{
			Configuration configuration = new Configuration().configure();
			ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().
					applySettings(configuration.getProperties()).build();
			sessionFactory = configuration.buildSessionFactory(serviceRegistry);
		}
		return sessionFactory;
	}
	
	public Session getSession() {
		return getSessionFactory().getCurrentSession();
	}

}
注意,使用getCurrentSession的时候需要设置cfg.xml中的属性

<!-- 配置管理Session的方式 -->

        <property name="current_session_context_class">thread</property>

2.批量操作

建议使用JDBC原生的API进行批处理
public void testBatch()
	{
		session.doWork(new Work() {
			
			@Override
			public void execute(Connection connection) throws SQLException {
				//使用JDBC原生的方法最好 
				
			}
		});
	}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值