hibernate API 操作数据库

//学习Configuration对象
//Configuration功能: 配置加载类.用于加载主配置,orm元数据加载
//----------------------------------------------------
//学习SessionFactory对象
// SessionFactory功能: 用于创建操作数据库核心对象session对象的工厂.
//                     简单说功能就一个---创建session对象
//注意:1.sessionfactory 负责保存和使用所有配置信息.消耗内存资源非常大.
//      2.sessionFactory属于线程安全的对象设计.
//结论: 保证在web项目中,只创建一个sessionFactory.
//----------------------------------------------------
public class Demo {

    @Test
    public void fun1(){
        //1 创建,调用空参构造
        Configuration conf = new Configuration();
        
        //2 读取指定主配置文件 => 空参加载方法,加载src下的hibernate.cfg.xml文件
        conf.configure();
        //以上两步可以合起来Configuration conf = new Configuration().configure();
        
        //3 读取指定orm元数据(扩展),如果主配置中已经引入映射配置.不需要手动加载
        //conf.addResource(resourceName);
        //conf.addClass(persistentClass);
        
        //4 根据配置信息,创建 SessionFactory对象
        SessionFactory sf = conf.buildSessionFactory();
        
        //5 获得session
        //打开一个新的session对象
        Session session = sf.openSession();
        
        //6获得操作事务的tx对象
        //Transaction tx = session.getTransaction();
        //开启事务并获得操作事务的tx对象(建议使用)
        Transaction tx2 = session.beginTransaction();
        
        //----------------------------------------------
        操作数据库
        //----------------------------------------------
        tx2.commit();//提交事务
        tx2.rollback();//回滚事务
        session.close();//释放资源
        sf.close();//释放资源
    }
}

抽取的工具类

HibernateUtils.java

public class HibernateUtils {
    private static SessionFactory sf;
    
    static{//保证里面的代码只执行一次
        //1 创建,调用空参构造
        Configuration conf = new Configuration().configure();
        //2 根据配置信息,创建 SessionFactory对象
        sf = conf.buildSessionFactory();
    }
    
    //获得session => 获得全新session
    public static Session openSession(){
        //3 获得session
        Session session = sf.openSession();     
        return session;
        
    }
//获得session => 获得与线程绑定的session public static Session getCurrentSession(){ //3 获得session Session session = sf.getCurrentSession(); return session; } }

注意1:调用getCurrentSession方法必须配合主配置中的一个属性使用

<property name="hibernate.current_session_context_class">thread</property>

注意2:通过getCurrentSession方法获得的session对象,当事务提交时,session会自动关闭,不要手动调用close

posted @ 2017-07-24 17:04  发福大叔  阅读(187)  评论(0编辑  收藏  举报