美文网首页
第二次作业 Hibernate构建单例SessionFactor

第二次作业 Hibernate构建单例SessionFactor

作者: 钢笔苹果大菠萝笔 | 来源:发表于2018-06-06 14:47 被阅读0次

    根据第一次配置的环境
    首先建立一个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事务 本地事务:数据库只有一个)
    <property name="hibernate.current_session_context_class">thread</property>  
    
    • 如果使用的是全局事务(jta事务 全局事务:数据库有多个)
    <property name="hibernate.current_session_context_class">jta</property>  
    

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

    储存成功


    储存成功
    数据库

    更新操作(改)

    成功
    数据库

    查询操作


    成功

    删除操作


    成功
    数据库ID为3的数据删除

    相关文章

      网友评论

          本文标题:第二次作业 Hibernate构建单例SessionFactor

          本文链接:https://www.haomeiwen.com/subject/dcebsftx.html