SSH与SSM学习之hibernate05——SessionFactory

SSH与SSM学习之hibernate05——SessionFactory

一、SessionFactory说明

SessionFactory功能:

用于创建操作数据库核心对象session对象的工厂.

简单说功能就一个—创建session对象

注意:

1.sessionfactory 负责保存和使用所有配置信息.消耗内存资源非常大.

2.sessionFactory属于线程安全的对象设计.

结论: 保证在web项目中,只创建一个sessionFactory.


二、两种获取方式

2.1 方式一

//Configuration功能: 配置加载类.用于加载主配置,orm元数据加载
//1 创建Configuration,调用空构造方法
Configuration conf = new Configuration();
//2 读取指定主配置文件 => 空参加载方法,加载src下的hibernate.cfg.xml文件
conf.configure();
//或者调用如下的方法,与上面是一样的
//sconf.configure("hibernate.cfg.xml");
//如果我们主配置文件是在com下面,那么应该是 conf.configure("com/hibernate.cfg.xml");
//3 根据配置信息,创建 SessionFactory 对象
SessionFactory factory = conf.buildSessionFactory();

2.2 方式二

// 但在5.1.0版本汇总,hibernate则采用如下新方式获取:
// 1. 配置类型安全的准服务注册类,这是当前应用的单例对象,不作修改,所以声明为final
// 在configure("hibernate.cfg.xml")方法中,如果不指定资源路径,默认在类路径下寻找名为hibernate.cfg.xml的文件
final StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure("hibernate.cfg.xml").build();

// 2. 根据服务注册类创建一个元数据资源集,同时构建元数据并生成应用一般唯一的的session工厂
SessionFactory factory = new MetadataSources(registry).buildMetadata().buildSessionFactory();

三、例子

package com.qwm.hilbernate01;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.junit.Test;

/**
 * @author:qiwenming
 * @date:2017/9/16 0016   22:09
 * @description:
 */
public class ApiDemo2 {
/*
SessionFactory功能:
             用于创建操作数据库核心对象session对象的工厂.
             简单说功能就一个---创建session对象
注意:
            1.sessionfactory 负责保存和使用所有配置信息.消耗内存资源非常大.
           2.sessionFactory属于线程安全的对象设计.
结论: 保证在web项目中,只创建一个sessionFactory.
*/

    @Test
    public void sfApiDeme1(){
        //Configuration功能: 配置加载类.用于加载主配置,orm元数据加载
        //1 创建Configuration,调用空构造方法
        Configuration conf = new Configuration();
        //2 读取指定主配置文件 => 空参加载方法,加载src下的hibernate.cfg.xml文件
        conf.configure();
        //或者调用如下的方法,与上面是一样的
        //sconf.configure("hibernate.cfg.xml");
        //如果我们主配置文件是在com下面,那么应该是 conf.configure("com/hibernate.cfg.xml");
        //3 根据配置信息,创建 SessionFactory 对象
        SessionFactory factory = conf.buildSessionFactory();

        //4 获取session
        Session session = factory.openSession();
        //5 开启事务
        Transaction t = session.beginTransaction();

        User user = new User("mingge",12);
        //6 数据持久化
        session.persist(user);

        //7 提交事务
        t.commit();
        //8 关闭session
        session.close();
    }

    @Test
    public void sfApiDemo2(){
        // 但在5.1.0版本汇总,hibernate则采用如下新方式获取:
        // 1. 配置类型安全的准服务注册类,这是当前应用的单例对象,不作修改,所以声明为final
        // 在configure("hibernate.cfg.xml")方法中,如果不指定资源路径,默认在类路径下寻找名为hibernate.cfg.xml的文件
        final StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure("hibernate.cfg.xml").build();

        // 2. 根据服务注册类创建一个元数据资源集,同时构建元数据并生成应用一般唯一的的session工厂
        SessionFactory factory = new MetadataSources(registry).buildMetadata().buildSessionFactory();

        //3 获取session
        Session session = factory.openSession();
        //4 开启事务
        Transaction t = session.beginTransaction();

        User user = new User("yy",20);
        //5 数据持久化
        session.persist(user);

        //6 提交事务
        t.commit();
        //7 关闭session
        session.close();
    }

}

四、数据库表结果

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值