美文网首页
Hibernate 主要 API

Hibernate 主要 API

作者: Draper | 来源:发表于2017-04-22 19:18 被阅读0次

Configuration 接口

该接口的作用是加载配置文件及映射文件,以实现对 Hibernate 的启动,Configuration 实例调用 Configuration 实例调用 buildSessionFactory 方法便可创建一个 Session 工厂 SessionFactory 对象

Configuration cfg = new Configuration().configure();

new Configuration() 会加载一个属性文件 hibernate.properties。该属性文件中存放数据连接配置、Hibernate 配置等配置信息。一般情况下不用设置该属性文件,其设置已经放到了主配置文件中。若要设置,应将其放于 src 目录下。赶文件的模板存放于 Hibernate 框架解压目录下的 project/etc 下。

configure() 方法,用于加载和解析 hibernate.cfg.xml 配置文件及映射的 Configuration 对象。

SessionFactory 接口

SessionFactory 接口对象是有 Conffiguration 对象通过 buildSessionFactory() 方法创建。创建对象的目的是,用于开启 Session 对象。

SessionFactory factory = cfg.buildSessionFactory();

SessionFactory 对象特点

重量级对象(系统开销大)、单例的、线程安全的。

SessionFactory 对象的使用原则

基于其是线程安全的重量级对象,其创建销毁是系统开销大,又是单例的特点,SessionFactory 对象一般不手动关闭,而是在应用解说时自动将其销毁。因此,SessionFactory 不用进行 close() 关闭。

Session 接口

Session 接口是应用程序与 HIbernate 连接的核心 API, 是 Hibernate 向应用程序提供的操作 DB 的主要接口。它提供了基本的保存、更新、删除与查询方法。由 SessionFactory 对象创建。

Session session = factory.openSession();

Session 对象的特点

一个轻量级对象、线程不安全、多例的。
在 Web 应用程序中,多个用户对统一应用访问, Hibernate 会为了每个用户创建一个 Session 对象。所以是多例的。Session 中包含大量非 final 成员变量,对于同一个用户的操作,可能会产生多个事务,这多个事务若同时对一个 Sesssion 的统一成员变量进行访问,就会引起并发问题。所以 Session 是线程不安全的。

Session 对象的使用原则

基于 Session 的以上特点,Session 在使用时做到一个线程一个 Session,即一个事务一个 Session。使用完毕,立即关闭。Session 不要作为某个类的成员变量出现,因为这样会出现多个实例对象对同一个 Session 的共享,使其更不安全。

Session 对象的获取

为了保证一个线程一个 Session,即一个线程中使用的 Session 是同一个对象,一般在获取 SessIon 对象,需要在主配置文件中对 Session 所处的上下文环境,即事务环境进行注册。
其取值方式有三种

|取值|意义|
|::|::|
|thread|表示当前 Session 所处的环境为本地事务环境,Session 会与当前线程绑定|
|jta|表示当前 Session 所处的环境为分布式事务环境|
|SpringSessionContext类|SSH 集合时使用|

使用 getCurrentSession()方法获取的 Session,在进行事务提交或回滚后,会自动关闭, 无需再手工进行 close()。

两种获取 Session对象方式的区别

获取 Session 对象,可以使用 openSession()方式,也可以使用 getCurrentSession()方式。 这两种方式在本质上有着很大的区别。

||getCurrentSession()方式|openSession()方式 |
|:--:|:--:|::|
|获取的对象 |无论执行多少次该方法,只要是 在同一线程中,获取的都是同一 个 Session对象|每执行一次该方法,获取到的 都是一个新的 Session 对象|
|对象的关闭|自动关闭 Session,无需手工关闭|必须手工关闭 Session 对象 |
|环境的注册|需要注册 Session 的运行环境|无需注册 |
|查询对事务 的支持 |查询必须在事务内执行|查询可以不在事务内执行|

Session 的常用方法

|方法|备注|
|::|::|
|save()|添加对象,Hibernate 的 API |
|persist()|添加对象,属于 JPA 的 API ,而 Hibernate 属于 JPA 的实现|
|delete()| 删除对象|
|update()|修改对象|
|saveOrUpdate()|根据主键来判断是否存在对象,有则更新,没有则创建|
|get()|若获取对象为 null 没有异常|
|load()|若获取对象为 null 则抛出异常

Transaction 接口

通过该接口,可以将事务从持久层,提升到业务层。由 Session 对象创建 session.getTransaction();
事务的开启:session.beginTransaction(); 或 session.getTransaction().begin();
事务的提交:session.getTransaction().commit();
事务的回滚:session.getTransaction().rollback();

相关文章

  • Hibernate 主要 API

    Configuration 接口 该接口的作用是加载配置文件及映射文件,以实现对 Hibernate 的启动,Co...

  • Hibernate之API

    一、Hibernate的API介绍 1、Configuration对象 Hibernate框架的配置对象,主要用于...

  • Hibernate从入门到应用

    Hibernate API简介 Hibernate API对 JDBC API 进行封装,提供面向对象的数据库访问...

  • Java bean validation 使用

    Notice:本文对Validation api的使用主要是运用了Hibernate-Validator,其中Hi...

  • Hibernate

    hibernate简介Hibernatehibernate简介hibernate快速入门session查询api实...

  • Hibernater学习笔记(二)

    hibernate核心api 1.Configuration 在src下面找名称为hibernate.cfg.xm...

  • spring——@Transactional为啥不生效

    Spring 针对 Java Transaction API (JTA)、JDBC、Hibernate 和 Jav...

  • hibernate

    介绍 hibernate配置文件说明 基本使用代码一 基本使用代码二 API 持久化类的状态 Hibernate的...

  • Java知识点总结框架篇16-20

    十六、Hibernate与JDBC的区别 1、hibernate和jdbc主要区别就是,hibernate先检索缓...

  • Hibernate核心API

    一、session session可以理解为操作数据库的对象session的特点:线程不安全 1、把对象保存在关系...

网友评论

      本文标题:Hibernate 主要 API

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