Hibernate之Configuration,SessionFactory,Session

2023-11-03 02:48

本文主要是介绍Hibernate之Configuration,SessionFactory,Session,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Configuration:
负责管理Hibernate的配置信息,这些配置信息都是从配置文件hibernate.cfg.xml或者Hibernate.properties读取的,当然也可以自定义文件名称,只要在实例化Configuration的时候指定具体的路径就可以了;

SessionFactiory:
Configuration的实例会根据当前的配置信息,构造SessionFactory实例。SessionFactory是线程安全的,一般情况下一个应用中一个数据库共享一个SessionFactory实例。
构建SessionFactory
Hibernate的SessionFactory接口提供Session类的实例,Session类用于完成对数据库的操作。由于SessionFactory实例是线程安全的(而Session实例不是线程安全的),所以每个操作都可以共用同一个SessionFactory来获取Session。
Hibernate配置文件分为两种格式,一种是xml格式的配置文件,另一种是Java属性文件格式的配置文件,因此构建SessionFactory也有两种方法,下面分别介绍。
2.6.1 从XML文件读取配置信息构建SessionFactory
从XML文件读取配置信息构建SessionFactory的具体步骤如下。
(1)创建一个Configuration对象,并通过该对象的configura()方法加载Hibernate配置文件,代码如下。
Configuration config = new Configuration().configure();
configura()方法:用于告诉Hibernate加载hibernate.cfg.xml文件。Configuration在实例化时默认加载classpath中的hibernate.cfg.xml,当然也可以加载名称不是hibernate.cfg.xml的配置文件,例如wghhibernate.cfg.xml,可以通过以下代码实现。
Configuration config = new Configuration().configure("wghhibernate.cfg.xml");
(2)完成配置文件和映射文件的加载后,将得到一个包括所有Hibernate运行期参数的Configuration实例,通过Configuration实例的buildSessionFactory()方法可以构建一个惟一的SessionFactory,代码如下。
SessionFactory sessionFactory = config.buildSessionFactory();
构建SessionFactory要放在静态代码块中,因为它只在该类被加载时执行一次。一个典型的构建SessionFactory的代码如下。

[java] view plain copy print ?
  1. import org.hibernate.*;    
  2. import org.hibernate.cfg.*;    
  3. public class CoreSession {    
  4. static SessionFactory sessionFactory;    
  5. //注意到这里的SessionFactory都是static的 
  6. //初始化Hibernate,创建SessionFactory实例,只在该类被加载到内存时执行一次    
  7.    
  8. static{    
  9.     try{    
  10.          Configuration config = new Configuration().configure();    
  11.          sessionFactory = config.buildSessionFactory();    
  12.    
  13.     } catch (Exception e) {    
  14.         System.out.println(e.getMessage());    
  15.     }     
  16. }    
  17. }    
import org.hibernate.*;   
import org.hibernate.cfg.*;   
public class CoreSession {   
static SessionFactory sessionFactory;   
//注意到这里的SessionFactory都是static的
//初始化Hibernate,创建SessionFactory实例,只在该类被加载到内存时执行一次   static{   try{   Configuration config = new Configuration().configure();   sessionFactory = config.buildSessionFactory();   } catch (Exception e) {   System.out.println(e.getMessage());   }    
}   
}   
2.6.2 从Java属性文件读取配置信息构建SessionFactory
从Java属性文件读取配置信息构建SessionFactory的具体步骤如下。
(1)创建一个Configuration对象,此时Hibernate会默认加载classpath中的配置文件hibernate.properties,代码如下。
Configuration config = new Configuration();
(2)由于在配置文件中缺少相应的配置映射文件的信息,所以此处需要通过编码方式加载,这可以通过Configuration对象的
addClass()方法实现,具体代码如下。
config.addClass(BranchForm.class);
addClass()方法用于加载实体类。
(3)完成配置文件和映射文件的加载后,将得到一个包括所有Hibernate运行期参数的Configuration实例,通过Configuration实例
的buildSessionFactory()方法可以构建一个惟一的SessionFactory,代码如下。
SessionFactory sessionFactory = config.buildSessionFactory();
构建SessionFactory要放在静态代码块中,因为它只需在该类被加载时执行一次,一个典型的构建SessionFactory的代码如下。

 

[java] view plain copy print ?
  1. import org.hibernate.*;    
  2. import org.hibernate.cfg.*;    
  3. public class CoreSession {    
  4. static SessionFactory sessionFactory;    
  5. //初始化Hibernate,创建SessionFactory实例,只在该类被加载到内存时执行一次     
  6. static{     
  7.     try{      
  8.        Configuration config = new Configuration();      
  9.         config.addClass(BranchForm.class);      
  10.         sessionFactory = config.buildSessionFactory();    
  11.     } catch (Exception e) {    
  12.         System.out.println(e.getMessage());    
  13.    }     
  14. }    
import org.hibernate.*;   
import org.hibernate.cfg.*;   
public class CoreSession {   
static SessionFactory sessionFactory;   
//初始化Hibernate,创建SessionFactory实例,只在该类被加载到内存时执行一次    
static{    try{     Configuration config = new Configuration();     config.addClass(BranchForm.class);     sessionFactory = config.buildSessionFactory();   } catch (Exception e) {   System.out.println(e.getMessage());   }    
}   
}

Session:
一般的持久化方法(CRUD)都是通过Session来调用的,Session是非线程安全的。
Session的创建与关闭 :Session是一个轻量级对象,通常将每个Session实例和一个数据库事务绑定,也就是每执行一个数据库事务,都应该先创建一个新的Session实例,在使用Session后,还需要关闭Session。
Session的创建
创建SessionFactory后,就可以通过SessionFactory创建Session实例,通过SessionFactory创建Session实例的代码如下。
Session session=sessionFactory.openSession();
创建Session后,就可以通过创建的Session进行持久化操作了。
Session的关闭
在创建Session实例后,不论是否执行事务,最后都需要关闭Session实例,释放Session实例占用的资源。
关闭Session实例的代码如下:session.close();

这篇关于Hibernate之Configuration,SessionFactory,Session的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/335051

相关文章

java面试常见问题之Hibernate总结

1  Hibernate的检索方式 Ø  导航对象图检索(根据已经加载的对象,导航到其他对象。) Ø  OID检索(按照对象的OID来检索对象。) Ø  HQL检索(使用面向对象的HQL查询语言。) Ø  QBC检索(使用QBC(Qurey By Criteria)API来检索对象。 QBC/QBE离线/在线) Ø  本地SQL检索(使用本地数据库的SQL查询语句。) 包括Hibern

org.hibernate.hql.ast.QuerySyntaxException:is not mapped 异常总结

org.hibernate.hql.ast.QuerySyntaxException: User is not mapped [select u from User u where u.userName=:userName and u.password=:password] 上面的异常的抛出主要有几个方面:1、最容易想到的,就是你的from是实体类而不是表名,这个应该大家都知道,注意

Caused by: org.hibernate.MappingException: Could not determine type for: org.cgh.ssh.pojo.GoodsType,

MappingException:这个主要是类映射上的异常,Could not determine type for: org.cgh.ssh.pojo.GoodsType,这句话表示GoodsType这个类没有被映射到

Hibernate框架中,使用JDBC语法

/*** 调用存储过程* * @param PRONAME* @return*/public CallableStatement citePro(final String PRONAME){Session session = getCurrentSession();CallableStatement pro = session.doReturningWork(new ReturningWork<C

hibernate修改数据库已有的对象【简化操作】

陈科肇 直接上代码: /*** 更新新的数据并并未修改旧的数据* @param oldEntity 数据库存在的实体* @param newEntity 更改后的实体* @throws IllegalAccessException * @throws IllegalArgumentException */public void updateNew(T oldEntity,T newEntity

SIGMOD-24概览Part7: Industry Session (Graph Data Management)

👇BG3: A Cost Effective and I/O Efficient Graph Database in ByteDance 🏛机构:字节 ➡️领域: Information systems → Data management systemsStorage management 📚摘要:介绍了字节新提出的ByteGraph 3.0(BG3)模型,用来处理大规模图结构数据 背景

Hibernate插入数据时,报错:org.springframework.dao.DataIntegrityViolationException: could not insert: [cn.itc

在用junit测试:插入数据时,报一下错误: 错误原因: package junit;import org.junit.Test;import cn.itcast.crm.container.ServiceProvinder;import cn.itcast.crm.dao.ISysUserDao;import cn.itcast.crm.domain.SysRole;

Hibernate中自带的连接池!!!

<span style="font-size:18px; font-family: Arial, Helvetica, sans-serif;"><?xml version="1.0" encoding="UTF-8"?></span> <span style="font-size:18px;"><!DOCTYPE hibernate-configuration PUBLIC"-//Hibern

flask-login 生成 cookie,session

flask-login 生成 cookie,session Flask-Login login_user() 显示来自 Set-Cookie 标头的加密 cookie # 模拟一个用户类class User(UserMixin):def __init__(self, id):self.id = id@app.route('/login')def login():# 模拟用户登录过程user

How can I load the openai api configuration through js in html?

题意:怎样在HTML中通过JavaScript加载OpenAI API配置 问题背景: I am trying to send a request through js in my html so that openai analyzes it and sends a response, but if in the js I put the following: 我正在尝试通过HTM