SessionFactory:

  a)  用来产生和管理Session

  b)通常情况下每个应用只需要一个SessionFactory

  c)除非要访问多个数据库的情况

  d) 关注两个方法即:  openSession    和 getCurrentSession

     i.   openSession 每次都是新的,需要close

     ii.  getCurrentSession 从上下文找,如果有,用旧的,如果没有,建新的

         1,用途,界定事务边界

         2,事务提交自动close

         3,跟current_session_context_class (JTA、thread) 有关系

            a)thread 使用 connection

注:上下文是什么?当前session运行的上下文,在hibernate.cfg.xml里指定的:

    最常用的就是thread,看当前的线程里有没有session对象,有了就拿,没有就建新的。

<!-- Enable Hibernate's automatic session context management -->
<property name="current_session_context_class">thread</property>

SessionFactory怎么理解?

SessionFactory,产生session的工厂。一般情况下,每一个session里都有一个数据库的连接,(如果没有数据库连接,怎么和数据库打交道呢?)所以产生session的工厂里边一定有好多个数据库连接,所以SessionFactory维护的最重要的东西就是数据库连接池。当它产生一个session的时候,他会从数据库连接池拿出一个连接交给session。

package com.oracle.hibernate.id;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.cfg.Configuration;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test; public class HibernateCoreAPITest { private static SessionFactory sf = null; @BeforeClass
public static void beforeClass() {
//try-chatch是为了解决Junit有错误不提示的bug
try {
/**
* AnnotationConfiguration().configure()会默认找src下的hibernate.cfg.xml,读取配置信息。
* 最主要的是数据库连接信息,帮你做出连接池。SessionFactory代表着跟数据库的连接
* configure()有个重载方法configure(String url)可以指定文件名;如果配置文件叫hibernate.xml,
* 就configure("hibernate.xml"),默认去classpath下找配置文件
*/
sf = new AnnotationConfiguration().configure().buildSessionFactory();
} catch (HibernateException e) { e.printStackTrace();
}
} @Test
public void testTeacher() { Teacher t = new Teacher(); t.setName("li"); t.setTitle("high");
/**
* getCurrentSession():
*1, 如果当前上下文有session,就拿来当前的session。如果没有,就创建一个新的session
* 2,不写session.close();
* 注意:当session commit()提交的时候自动close(),写了会报错。
* 提交同时也会关闭当前session,上下文将不存在该session,此时getCurrentSession()就会创建一个新的session。
*/
Session session = sf.getCurrentSession(); /**
* session有个connection方法,返回值也是Connection,可以看出在这个session里绑定了一个Connection,
* 这个Connection是从SessionFactory通过配置文件信息,产生的数据库连接池里取出的。所以简单理解,session等
* 同于一个Connection,不过也不能这个理解,hibernate还有很多很复杂的东西。
*/
//session.connection(); //openSession(),永远都打开新的session。需要close();
//Session session = sf.openSession(); session.beginTransaction();
session.save(t); //当当前的session提交了,就关闭了,对象就没了。再getCurrentSession就是新的。
//session.getTransaction().commit();
//session.close(); //Session session2 = sf.openSession();
//两次opSession不是一个session,返回false
//System.out.println(session == session2); //Session session2 = sf.getCurrentSession();
//如果session没commit,返回true,否则返回false
//System.out.println(session == session2); }
@AfterClass
public static void afterClass() {
sf.close();
} }

Hibernate核心开发接口_SessionFactory详解的更多相关文章

  1. Hibernate学习笔记2.5(Hibernate核心开发接口和三种状态)

    1.configuration(配置信息管理,产生sessionfactory) sessionfactory管理一系列的连接池 opensession 永远打开新的,需要手动close getcur ...

  2. SQLite3开发接口函数详解

    SQLite3是SQLite一个全新的版本,它虽然是在SQLite 2.8.13的代码基础之上开发的,但是使用了和之前的版本不兼容的数据库格式和API. SQLite3是为了满足以下的需求而开发的: ...

  3. hibernate核心开发接口_Configuration

    AnnotationConfiguration继承自Configuration,这里以AnnotationConfiguration为例: new AnnotationConfiguration(). ...

  4. 5.Hibernate 核心开发接口

    一.Configuration(AnnotationConfiguration) 作用:进行配置信息的管理 目标:用来产生SessionFactory 可以在configure 方法中指定hibern ...

  5. C#二次开发BIMFACE系列61 File Management文件管理服务接口二次开发及实战详解

    系列目录     [已更新最新开发文章,点击查看详细] 在我的博客<C#二次开发BIMFACE系列61 File Management文件管理服务接口二次开发及实战详解>最后列出了 Fil ...

  6. HIbernate学习笔记(二) hibernate对象的三种状态与核心开发接口

    1.在hibernate中持久化对象有三个状态,这个面试时可能会问到: (1)transient瞬时态:在数据库中没有与之匹配的数据,一般就是只new出了这个对象,并且在session缓存中也没有即此 ...

  7. WebService核心之WSDL深入详解

    WebService核心之WSDL深入详解 根据上一篇文章开发的Web Service实例生成的WSDL文档如下: XML里两个属性介绍: targetNamespace          相当于ja ...

  8. Hibernate配置文件和映射文件详解

    Hibernate是一个彻底的ORM(Object Relational Mapping,对象关系映射)开源框架. 我们先看一下官方文档所给出的,Hibernate 体系结构的高层视图: 其中PO=P ...

  9. 【转】maven核心,pom.xml详解

    感谢如下博主: http://www.cnblogs.com/qq78292959/p/3711501.html maven核心,pom.xml详解 什么是pom?    pom作为项目对象模型.通过 ...

随机推荐

  1. Linux 基础教程 28-nc命令

    nc     nc命名netcat,直译为网络猫.在CentOS 7查看帮助的解释如下所示: ncat - Concatenate and redirect sockets 翻译过来就是可以连接和重定 ...

  2. 作业一:博客和Github简单练习

    (1)自我介绍 Hello everybody! 我叫纪杨阳,学号1413042002,网络工程141班. 本人没啥特殊的兴趣爱好,都是些平常得不能再平常的吃吃睡睡.要说感兴趣的,可能就是音乐和服饰还 ...

  3. Objective-C 学习笔记(五) 快速枚举

    Objective-C 快速枚举 快速枚举是一个Objective-C的功能,有助于列举一个集合. 快速枚举语法 for (classType variable in collectionObject ...

  4. 配置IIS Express,支持JSON

    方法有2种: 1. 命令行 a. cd "iis express的安装目录"  例如:cd C:\Program Files (x86)\IIS Express b. appcmd ...

  5. 精妙SQL语句大全

    一.基础 1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:备份sql server --- ...

  6. WindowsPhone模拟简易Toast弹出框

    Coding4Fun这个开源控件中有ToastPrompt这个弹出框组件,但是由于Coding4Fun太庞大,如果只用到ToastPrompt这个控件的话,整个引用不太值当的.于是自己写了一个差不多的 ...

  7. deepin获取root权限

    ctrk+alt+t 打开终端 输入 sudo passwd root mywork@mywork-PC:~$ sudo passwd root[sudo] mywork 的密码: [sudo] 输入 ...

  8. 486. Predict the Winner

    Given an array of scores that are non-negative integers. Player 1 picks one of the numbers from eith ...

  9. [SQL] 简单新建(create)删除(drop\delete)权限(grant/revoke)修改(set\update)

    一.前言 说起来 数据库(Structured Query Language),本站写过很多类似文章. 如: Mysql创建.删除用户 phpMyAdmin 登陆需要密码 记一次裸迁 MySQL 经历 ...

  10. Linux 中排除掉筛选的文件

    以下命令以网站目录www为例做介绍,有时候更新网站的时候需要保留比如图片目录,或者其他目录就需要这样的操作 实例一: 删除文件夹内所有文件只保留一个文件命令 [root@linuxzgf www]# ...