第二次作业 Hibernate构建单例SessionFactory

根据第一次配置的环境
首先建立一个HibernateUtil.java

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

public class HibernateUtil {
    private static Configuration cfg;
    private static SessionFactory sessionFactory;
    static {
        try {
            cfg = new Configuration().configure();
            sessionFactory = cfg.buildSessionFactory();
        }catch (Exception e) {
            e.printStackTrace();
        }
    }


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

再创建一个测试类TestUser
要注意导入junit的jar包

import com.TestentityEntity;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.junit.Test;

import com.HibernateUtil;

public class TestUser {
    @Test
    public void saveUser() {
        SessionFactory sessionFactory = null;
        Session session = null;
        Transaction transaction = null;
        TestentityEntity user = new TestentityEntity();
        user.setTname("hongguoguo");
        user.setTid(111);
        try {
            sessionFactory = HibernateUtil.getSessionFactory();
            session = sessionFactory.getCurrentSession();
            transaction = session.beginTransaction();
            session.save(user);
            transaction.commit();
        } catch (Exception e) {
            if (transaction!=null) {
                transaction.rollback();
            }
            e.printStackTrace();
        }
    }

    @Test
    public void updateUser() {

        SessionFactory sessionFactory = null;
        Session session = null;
        Transaction transaction = null;
        try {
            sessionFactory = HibernateUtil.getSessionFactory();
            session = sessionFactory.getCurrentSession();
            transaction = session.beginTransaction();
            TestentityEntity user = session.get(TestentityEntity.class, 1);
            user.setTname("lvpaopao");
            user.setTid(111);
            session.update(user);
            transaction.commit();
        } catch (Exception e) {
            if (transaction!=null) {
                transaction.rollback();
            }
            e.printStackTrace();
        }
    }

    @Test
    public void queryUser() {

        SessionFactory sessionFactory = null;
        Session session = null;
        Transaction transaction = null;
        try {
            sessionFactory = HibernateUtil.getSessionFactory();
            session = sessionFactory.getCurrentSession();
            transaction = session.beginTransaction();
            TestentityEntity user = session.get(TestentityEntity.class, 2);
            System.out.println("ID:"+user.getTid()+" 姓名:"+user.getTname());
            transaction.commit();
        } catch (Exception e) {
            if (transaction!=null) {
                transaction.rollback();
            }
            e.printStackTrace();
        }
    }
    @Test
    public void deleteUser() {

        SessionFactory sessionFactory = null;
        Session session = null;
        Transaction transaction = null;
        try {
            sessionFactory = HibernateUtil.getSessionFactory();
            session = sessionFactory.getCurrentSession();
            transaction = session.beginTransaction();
            TestentityEntity user = session.get(TestentityEntity.class, 1);
            session.delete(user);
            transaction.commit();
        } catch (Exception e) {
            if (transaction!=null) {
                transaction.rollback();
            }
            e.printStackTrace();
        }
    }
}

错误:
第一次运行报错


报错

原理

1、在 SessionFactory(会话工厂)启动的时候,Hibernate 会根据配置创建相应的 CurrentSessionContext,

在getCurrentSession()被调用的时候,实际被执行的方法是 CurrentSessionContext.currentSession()。

2、这里的“根据配置”就是如下配置:

  • 如果使用的是本地事务(jdbc事务 本地事务:数据库只有一个)
thread  
  • 如果使用的是全局事务(jta事务 全局事务:数据库有多个)
jta  

解决方法
在hibernate.cfg.xml中加入以上配置

储存成功


储存成功

数据库

更新操作(改)

成功

数据库

查询操作


成功

删除操作


成功

数据库ID为3的数据删除

你可能感兴趣的:(第二次作业 Hibernate构建单例SessionFactory)