Hibernate5个核心接口

所有Hibernate应用中都会访问Hibernate的5个核心接口

Configuration接口:配置Hibernate,根启动Hibernate,创建SessionFactory对象。

SessionFactory接口:初始化Hibernate,充当数据存储源的代理,创建Session对象。

Session接口:负责保存,更新,删除,加载和查询对象。

Transaction:管理事务

Query和Criteria接口:执行数据库查询

下图为五个核心接口的类框图

1、Configuration接口
Configuration用于配置并启动Hibernate。Hibernate应用通过Configuration的实例来指定对象-关系映射文件,或通过Configuration动态配置Hibernate的属性,然后通过Configuration来创建相应的SessionFactory实例。
 
2、SessionFactory接口
一个SessionFactory对应一个数据源,它是个重量级对象,不可随意生成多个实例。对于一般的单数据库应用来说,只需要一个SessionFactory就足够了。当然如果有多个数据库的话,还是需要为每个数据库生成对应的SessionFactory。它是线程安全的,同一个实例可以被应用中的多个线程共享。
也许你会很好奇,SessionFactory为什么是重量级对象呢?我也同样好奇,通过查看Hibernate的源码,发现SessionFactory存放了大量预定义的SQL语句以及映射元数据,所以自然需要很大的缓存了,同时需要一定的CPU时间来计算生成。想想Hibernate的这个设计是很有意义的,因为有了Mapping文件,很多SQL语句就已经确定了,只需要动态生成一次就可以了,这个设计也是为了提高持久化的效率。
 
3、Session接口
从SessionFactory中可以获得Session实例。
Session接口是Hibernate应用中使用最广泛的接口了,它是持久化管理器,提供添加、更新、删除、加载、查询对象。Session不是线程安全的,所以应避免多个线程共享同一个Session实例。Session是轻量级对象,它的创建和销毁不需要太多资源,这意味着在应用中可以经常创建和销毁Session对象。
Session有一个缓存,称之为Hibernate的一级缓存,它存放当前工作单元加载的持久化对象,每个Session都有自己的缓存,缓存中的对象只能被当前工作单元访问。
 
4、Transaction接口
Transaction是Hibernate的数据库事务接口,它对底层道德事务接口进行了封装,底层事务接口包括:
    JDBC API
    JTA(Java Transaction API)
    CORBA(Common Object Requet Broker Architecture) API
Hibernate应用可以通过一致Transaction接口来声明事务边界,这有助于应用可以在不同的环境或容器中移植。具体的事务实现使用在Hibernate.properties中进行指定。
 
5、Query和Criteria接口
这两个是Hibernate的查询接口,用于向数据库查询对象,以及控制执行查询的过程。Query实例包装了一个HQL(Hibernate Query Language)来查询。Criteria接口完全封装了基于字符串形式的查询语句,比Query更面向对象,Criteria更擅长执行动态查询。

回调接口

当一个对象发生了特定的事件,例如对象被加载,保存,更新或删除,Hibernate应用可以通过回调接口来响应这一时间。回调接口

按实现方式可分为两类:

Lifecycle和Vaillidatable接口:由持久化类来实现这两个接口。Lifecycle接口使持久化类的实例能响应被加载,保存或删除的事件,Validatable接口使持久化类的实例在被保存之前进行数据验证。这种方式强迫持久化类必须实现Hibernate的特定接口,使Hibernate API渗透到持久化类中,会影响持久化类的可移植性,因此不值得推荐。

Inerceptor接口:不必由持久化类实现Interceptor接口,应用程序可以定义专门实现Interceptor接口的类,Interceptor实现类负责响应持久化类的实例被加载,保存,更新,或删除的事件

摘自《精通Hibernate(孙卫琴)》

Hibernate的核心接口的更多相关文章

  1. 写出Hibernate中核心接口/类的名称,并描述他们各自的责任?

    Hibernate的核心接口一共有5个,分别为:Session.SessionFactory.Transaction.Query和 Configuration.这5个核心接口在任何开发中都会用到.通过 ...

  2. Hibernate五大核心接口简介

    所有的Hibernate应用中都会访问Hibernate的5个核心接口. Configuration接口:配置Hibernate,根启动Hibernate,创建SessionFactory对象. Se ...

  3. Hibernate 之核心接口

    1.持久化和ORM 持久化是指把数据(内存中的对象)保存到可持久保存的存储设备中(如硬盘),主要应用于将内存中的数据存储到关系型数据库中,在三层结构中,持久层专注于实现系统的逻辑层面,将数据使用者与数 ...

  4. Hibernate学习笔记(4)---hibernate的核心接口

    Configuration类 该类主要是读取配置文件,启动hibernate,并负责管理hibernate的配置信息,一个程序只创建一个Configuration对象. Configuration类操 ...

  5. hibernate学习系列-----(2)hibernate核心接口和工作机制

    在上一篇文章hibernate学习系列-----(1)开发环境搭建中,大致总结了hibernate的开发环境的搭建步骤,今天,我们继续了解有关hibernate的知识,先说说这篇文章的主要内容吧: C ...

  6. Hibernate(三)__核心接口和类

    该图显示了核心接口类以及配置文件的关系层次,越往下越偏向底层数据库. 1. hibernate.cfg.xml文件 ①该文件主要用于指定各个参数,是hibernate核心文件 ②默认放在src目录下, ...

  7. hibernate核心接口,和扩展接口。回顾笔记,以前没记,现在补上,纯手工敲的。

    hibernate核心接口: 所有的hibernate应用都会访问hibernate的5个核心接口 1,Configuration接口 Configuration用于配置并且根启动Hibernate. ...

  8. Hibernate详解(5)——Hibernate核心接口和工作原理

    Hibernate核心接口 Hibernate有五大核心接口,分别是:Session Transaction Query SessionFactoryConfiguration .这五个接口构成了Hi ...

  9. 深入解析Hibernate核心接口

    Hibernate有很多值得学习的地方,这里我们主要介绍Hibernate核心接口,包括介绍SessionFactory接口.Query和Criteria接口等方面. Session 接口对于Hibe ...

随机推荐

  1. ps和AI使用过程中的易错点整理

    ps:1.视图工具:1)标尺2)参考线3)网格:视图-->--显示>-->网格4)修改网格:编辑-->首选项>-->参考线.网格和切片 5)放大工具:画布中单击可放 ...

  2. Android 第二波

    三面,4个技术人员面试的问题不是很难.问题如下: 1. Service两种方式的区别 首先说service分为两种,一种是绑定的一种是非绑定的非绑定的生命周期是 onCreate(),onStartC ...

  3. HDU 1166 敌兵布阵(线段树/树状数组模板题)

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  4. 修改Linux服务器的ttl值

    [root@test_android_client_download ~]# cat /etc/sysctl.conf |grep net.ipv4.ip_default_ttlnet.ipv4.ip ...

  5. models批量生成数据

    models批量生成数据 1.将数据生成为 列表序列,通过 bulk_create 将数据一次插入数据库中 def host(request): # 插入数据速度快消耗资源少 Hostlist=[] ...

  6. lua和java防注入

    lua样例 local sql = "SELECT * FROM t_base_person WHERE person_id=%s and bureau_id=%s" sql = ...

  7. 为什么在球坐标系中,sinTheta2=std::max(T(0), 1 - cosTheta(w) * cosTheta(w));

    球坐标系中,计算sin2θ时,采用的是如下公式,感觉不理解为什么要搞一个max函数,直接1 - cosTheta(w) * cosTheta(w)不行吗,另外,即使要用max,max的第一个参数应该是 ...

  8. ASP.NET Core JWT认证授权介绍

    using JWTWebApi.Models; using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.AspNetC ...

  9. [转] react-router4 + webpack Code Splitting

    项目升级为react-router4后,就尝试着根据官方文档进行代码分割.https://reacttraining.com/react-router/web/guides/code-splittin ...

  10. 【前端基础系列】理解bind方法使用与实现

    方法描述 bind()方法创建一个新函数,当被调用时,将其this关键字设置为提供的值. 语法说明 fn.bind(thisArg,arg1,arg2,..) 参数说明 thisArg:当绑定函数被调 ...