Hibernate——SessionFactory产生session的两种方法

SessionFactory可以简单理解为数据库的连接池,用于产生session
产生session有两种方法
(1)Session session = sf.openSession();
(2)Session session = sf.getCurrentSession();


openSession每次都创建一个新的session,需要手动close


getCurrentSession如果没有提交过,一直用同一个session,提交后,新建一个session
(从上下文找,如果有,用旧的,如果没有,建新的)
i.用途,界定事物边界(事物的开始和结束,从beginTransaction到commit transaction)

ii.事物提交自动close


假设有一个addUser()方法,要对数据库执行save(User)和addLog()两个操作,这两个操作要放在一个transaction中,要么同时完成,要么都不完成。此时两个session就要是同一个session,不然不能放在一个transaction中。


public class StudentTest {
	private static SessionFactory sf=null;

	@BeforeClass
	public  static void beforeClass(){
		Configuration cfg = new Configuration();
		cfg.configure();//解析XML文件,不加参数解析classpath下名字为hibernate.cfg.xml文件
		ServiceRegistry sr = new ServiceRegistryBuilder().applySettings(
				cfg.getProperties()).buildServiceRegistry();
		
		sf = cfg.buildSessionFactory(sr);
	}
	@Test
	public void test() {
		Student s = new Student();
		s.setName("lll");
		s.setAge(11);
		

		//Session session = sf.openSession();
		Session session = sf.getCurrentSession();
		session.beginTransaction();
		session.save(s);
		session.getTransaction().commit();
		//session.close();
		
	}
	
	@AfterClass
	public static void afterClass(){
		sf.close();
	}

}


getCurrentSession需要配置

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值