hibernate——单例模式的Session

getCurrentSession()获得的session的好处。 

1)currentSession和当前线程绑定。

2)currentSession在事务提交后自动关闭。

需要在  hibernate.cfg.xml  中添加的配置
<property name="hibernate.current_session_context_class">thread</property>

创建类 com.util.HibernateSingleUtil.java实现单例模式的SessionFactory。

package com.util;

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

public class HibernateSingleUtil {
	private static SessionFactory factory;
	private static final String RESOURCE = "resource/hibernate.cfg.xml";
	// 静态初始化块,加载配置信息,获取SessionFactory
	static {
		// 读取hibernate.cfg.xml文件
		Configuration cfg = new Configuration().configure(RESOURCE);
		// 建立SessionFactory
		factory = cfg.buildSessionFactory();
	}

	public static SessionFactory getSessionFactory() {
		return factory;
	}
}

使用getCurrentSession()获得session

package com.test;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;

import com.entity.Student;
import com.util.HibernateSingleUtil;

public class Main {
	public static void main(String[] args) {
		SessionFactory factory = HibernateSingleUtil.getSessionFactory();
		// getCurrentSession()生成的Session不需要手动关闭,会在事务提交后自动关闭。
		Session session = factory.getCurrentSession();
		Student stu = new Student();
		stu.setName("非常美丽的巨兔");
		stu.setGender("M");
		stu.setAge(26);
		Transaction transaction = null;
		try {
			// 得到事务对象
			transaction = session.beginTransaction();
			// 添加操作
			session.save(stu);
			transaction.commit();
		} catch (Exception e) {
			if (transaction != null) {
				// 事务回滚
				transaction.rollback();
			}
			e.printStackTrace();
		}
	}
}

返回结果:

Hibernate: select max(ID) from STUDENT
Hibernate: insert into STUDENT (NAME, GENDER, AGE, ID) values (?, ?, ?, ?)

猜你喜欢

转载自blog.csdn.net/qq_34218892/article/details/80607925
今日推荐