需要在 hibernate.cfg.xml 中添加的配置
- <property name="hibernate.current_session_context_class">thread</property>
<property name="hibernate.current_session_context_class">thread</property>
创建类 HibernateUtil.java实现单例模式的SessionFactory。
- import org.hibernate.SessionFactory;
- import org.hibernate.cfg.Configuration;
- public class HibernateUtil {
- private static final Configuration config;
- private static final SessionFactory factory;
- static { // 静态初始化块,加载配置信息
- config = new Configuration().configure(); // 读取文件
- factory = config.buildSessionFactory();
- }
- public static Session getSessionFactory(){
- return factory;
- }
- }
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateUtil {
private static final Configuration config;
private static final SessionFactory factory;
static { // 静态初始化块,加载配置信息
config = new Configuration().configure(); // 读取文件
factory = config.buildSessionFactory();
}
public static Session getSessionFactory(){
return factory;
}
}
实现了session对象只被创建一次,避免了多次加载sessionfactory的负担。
- import org.hibernate.Session;
- import org.hibernate.Transaction;
- import org.junit.Test;
- public class Test {
- @Test
- public void select(){
- Session session = HibernateUtils.getSession();
- Transaction t = session.beginTransaction();
- }
- }
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;
public class Test {
@Test
public void select(){
Session session = HibernateUtils.getSession();
Transaction t = session.beginTransaction();
}
}
在测试类中去调用静态代码块类就可以进行操作了。
使用getCurrentSession()获得session
- import org.hibernate.Session;
- import org.hibernate.SessionFactory;
- import org.hibernate.Transaction;
- import demo.entity.User;
- public class Test {
- public static void main(String[] args) {
- SessionFactory factory = HibernateUtil.getSessionFactory();
- //getCurrentSession()生成的Session不需要手动关闭,会在事务提交后自动关闭。
- Session session = factory.getCurrentSession();
- User user = new User();
- user.setUsername("qqqqq");
- user.setPassword("qqqqq");
- user.setNickname("name1");
- Transaction transaction = null;
- try {
- transaction = session.beginTransaction();
- session.save(user);
- //session.delete(user);//删除操作
- //User tmp = session.find(User.class, 1);//查找操作
- //session.update(user);//更新操作
- transaction.commit();
- } catch (Exception e) {
- if (transaction != null) {
- transaction.rollback();
- }
- e.printStackTrace();
- }
- }
- }