美文网首页
第二次作业 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

    根据第一次配置的环境首先建立一个HibernateUtil.java 再创建一个测试类TestUser要注意导入j...

  • Hibernate_3 hibernate.cfg.xml的常用

    首先看一个简的 hibernate.cfg.xml 单配置 下面就以上面这个简单的为例,对 hibernate.c...

  • hibernate的一级缓存与二级缓存

    hibernate的一级缓存与二级缓存:1.一级缓存是session级别的,而二级缓存是sessionFactor...

  • 单例模式(Singleton)

    构建懒汉方式:指全局的单例实例在第一次被使用时构建。饿汉方式:指全局的单例实例在类装载时构建。 用静态内部类可以在...

  • 单例设计模式理解

    单例:即只返回同一个构建对象的一种设计模式 1.最常见的单例:这是一种线程不安全的单例 2.饿汉式单例: 3.懒汉...

  • hibernate

    构建hibernate项目 导入相关jar包 配置hibernate.cfg.xml导头。hibernate-ma...

  • 单例模板

    为避免来反复写单例模式,在框架中构建一个单例模板,需要用的地方直接继承就可。 基本要求 单例模式必须继承自Mono...

  • 关于dispatch_once的坑及注意点

    说到单例,在Objective-C中我们很容易就能想到用dispatch_once来构建一个单例的对象,然而最近因...

  • 浅谈单例模式

    单例模式 饿汉模式:全局的单实例在类构建时构建 优点: 饿汉式没有加任何的锁,因此执行效率比较高 缺点: 饿汉式在...

  • 单例模式

    单例设计模式:采取某种方法,对某个类在整个系统中,只有一个对象实例。比如Hibernate 的SessionFac...

网友评论

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

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