Hibernate-chapter one
======什么是Hibernate???======
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。——《百度百科》
1.Hibernate 是一个开源框架,与 Struts 这种 MVC(Model-View-Controller) 框架不同的是,Hibernate 是一种 ORM(Object/Relational Mapping) 框架。
2.ORM 意为对象关系映射,因此 Hibernate 会在 Java 对象和关系数据库之间建立某种映射,以达到存取 Java 对象的目的,是实现持久化存储(将内存中的数据存储在关系型的数据库、磁盘文件、XML数据文件中等等)的一种解决方案。
*******************普及一下ORM**************************************
-ORM(Object/Relation Mapping):对象/关系映射
*ORM主要解决对象~关系的映射
*ORM的思想:将关系数据库中的记录映射成为对象,以对象的形式展示,程序员可以把对数据库的操作转化为对对象的操作。
*ORM采用元数据来描述对象~关系映射细节,元数据通常采用XML格式,并且放在专门的对象~关系映射文件中。

3.Hibernate 不仅管理 Java 类到数据库表的映射(包括从 Java 数据类型到 SQL 数据类型的映射),还提供数据查询和获取数据的方法,可以大幅度减少开发时人工使用 SQL 和 JDBC 处理数据的时间。这正是它的设计目标,即将软件开发人员从大量相同的数据持久层相关编程工作中解放出来。
======Hibernate体系结构======
~简要的 Hibernate 整体体系结构大致图~

从上图可以看出,Hibernate 使用数据库(Database)和配置信息(hibernate.properties 等)来为应用程序提供持久化服务(以及持久的对象 Persistent Objects)。
我们再来看看 Hibernate 运行时的体系结构。由于Hibernate非常灵活,且支持多种应用方案, 所以这里我们只描述一下两种极端的情况。
- “轻型”的体系结构方案
要求应用程序提供自己的 JDBC 连接并管理自己的事务。这种方案使用了 Hibernate API 的最小子集:

- “全面解决”的体系结构方案
将应用层从底层的 JDBC/JTA API 中抽象出来,而让 Hibernate 来处理这些细节:

======基本 APIs=======
SessionFactory
(org.hibernate.SessionFactory)
对于单个数据库映射关系经过编译后的内存缓存,它是线程安全且不可变的。是 Session 生成的工厂实例,也是 ConnectionProvider 的一个客户端(会用到 ConnectionProvider)。它在进程或集群的级别上,为那些在事务之前可重复使用的数据提供了选择性的二级缓存。
- Session(org.hibernate.Session)
提供应用程序和持久化存储介质之间的一个单线程的会话对象,此对象生存期很短。它隐藏了 JDBC 连接,也是 Transaction 的工厂实例。对于应用的持久化对象及其集合,它提供了一个一级缓存;当遍历导航对象图或者根据持久化标识查找对象时,会用到这个一级缓存。
- 持久化的对象及其集合
具有持久化状态和业务功能的单线程对象,同样生存期很短。这些对象可能是普通的 JavaBeans/POJOs(Plain Ordinary Java Object),它们只能与一个 Session 相关联。一旦 Session 被关闭,它们就会脱离持久化状态,并且可以被应用程序的任何层使用(比如跟表示层打交道的 data transfer objects)
瞬态(transient)、脱管
状态(detached)的对象及其集合
持久化的类目前没有和 Session 相关联的实例。他们可能是因为在被应用实例化后还没有被持久化,也可能是由于实例化它们的 Session 对象已经被关闭,从而脱离了持久化状态。
事务(Transaction)
(org.hibernate.Transaction)
(可选的)它是应用程序用来指定原子操作单元范围的对象,是一个单线程的、短生存周期的对象。它使用抽象把应用从底层的 JDBC、JTA 以及 CORBA 事务中隔离开。在某些情况下,一个 Session 可能涵盖多个 Transactions 对象。尽管使用该对象是可选的,但事务的划分(无论是使用底层的 API 还是使用 Transaction 对象)都是不可选的。
ConnectionProvider
(org.hibernate.connection.ConnectionProvider)
(可选的)JDBC 连接的工厂和连接池。它通过抽象把应用从底层的 DataSource 或者 DriverManager 隔离开。这并不开放给应用程序使用,但对开发者而言是可以扩展或实现的。
TransactionFactory
(org.hibernate.TransactionFactory)
(可选的)生成 Transaction 对象实例的工厂。仅供开发者扩展/实现用,并不开放给应用程序使用。
- 扩展接口(Extension Interfaces)
Hibernate 提供了很多可选的扩展接口,你可以通过实现它们来定制你的持久层的行为。
======Hibernate优点======
a、封装了jdbc,简化了很多重复性代码。
b、简化了DAO层编码工作,使开发更对象化了。
c、移植性好,支持各种数据库,如果换个数据库只要在配置文件中变换配置就可以了,不用改变hibernate代码。
d、支持透明持久化,因为hibernate操作的是纯粹的(pojo)java类,没有实现任何接口,没有侵入性。所以说它是一个轻量级框架。
e、它支持各种关系数据库,从 一对一 到 多对多 的各种复杂关系。
--------------------------------------------------------------------------------------------------------------------------------------来自尼玛星球的光军/QQ:383996901
Hibernate-chapter one的更多相关文章
- [转]Hibernate设置时间戳的默认值和更新时间的自动更新
原文地址:http://blog.csdn.net/sushengmiyan/article/details/50360451 Generated and default property value ...
- TIJ——Chapter Two:Everything Is an Object
If we spoke a different language, we would perceive a somewhat different world. Ludwig Wittgenstein( ...
- Hibernate对象映射类型
Hibernate understands both the Java and JDBC representations of application data. The ability to rea ...
- Chapter 7. Dependency Management Basics 依赖管理基础
This chapter introduces some of the basics of dependency management in Gradle. 7.1. What is dependen ...
- Hibernate设置时间戳的默认值和更新时间的自动更新
Generated and default property values 生成的和默认的属性值 The database sometimes generates a property value, ...
- Hibernate Validator 6.0.9.Final - JSR 380 Reference Implementation: Reference Guide
Preface Validating data is a common task that occurs throughout all application layers, from the pre ...
- HQL: The Hibernate Query Language
Chapter 14. HQL: The Hibernate Query Language 14.1. Case Sensitivity 14.2. The from clause 14.3. Ass ...
- Hibernate Persistence Contexts
Hibernate ORM 5.2.18.Final User Guidehttps://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/ ...
- hibernate多对多关联映射
关联是类(类的实例)之间的关系,表示有意义和值得关注的连接. 本系列将介绍Hibernate中主要的几种关联映射 Hibernate一对一主键单向关联Hibernate一对一主键双向关联Hiberna ...
- 解决 Springboot Unable to build Hibernate SessionFactory @Column命名不起作用
问题: Springboot启动报错: Caused by: org.springframework.beans.factory.BeanCreationException: Error creati ...
随机推荐
- 几个SQL小知识
写在前面的话:之前做的一个项目,数据库及系统整体构架设计完成之后,和弟兄们经过一段时间的编码,系统如期上线,刚开始运行一切良好,后来随着数据量的急剧膨胀,慢慢出现了很多莫名其妙的问题,经过调试,修改了 ...
- 測試大型資料表的 Horizontal Partitioning 水平切割
FileGroup 檔案群組 :一個「資料庫(database)」可對應一或多個 FileGroup,一個 FileGroup 可由一或多個 file (.ndf) 構成. FileGroup 可讓 ...
- Rabbitmq安装与配置
install: 1.安装Erlang: $yum -y install erlang 2.安装rabbitmq-server: $rpm --import https://www.rabbitmq. ...
- AngularJS中的表单验证
AngularJS中的表单验证 AngularJS自带了很多验证,什么必填,最大长度,最小长度...,这里记录几个有用的正则式验证 1.使用angularjs的表单验证 正则式验证 只需要配置一个正则 ...
- DataGrid中的事件和方法
事件: onLoadSuccess:数据加载成功的时候触发. onLoadError:在载入远程数据产生错误的时候触发. onClickCell:在用户点击一个单元格的时候触发. onDblClick ...
- WPF Datagrid删除一行
private void btnDel_Click(object sender, RoutedEventArgs e) { if (DGUser.SelectedItem != null) { Dat ...
- eclipse将android项目生成apk并且给apk签名
转载:http://www.cnblogs.com/tianguook/archive/2012/09/27/2705724.html 生成apk最懒惰的方法是:只要你运行过android项目,到工作 ...
- AngularJS之中级Route【二】(七)
前言 上一篇我们介绍了AngularJS内置的路由ngRoute,我们知道AngularJS被广泛应用于单页应用SPA(Single Page Application)中,此时路由对于我们来讲非常重要 ...
- 如何用Dummy实例执行数据库的还原和恢复
今天实验了一下,如何在所有文件,包括数据文件,在线日志文件,控制文件都丢失的情况下,利用RMAN备份恢复和还原数据库.该实验的重点是用到了Dummy实例. 具体步骤如下: 备份数据库 [oracle@ ...
- Google Chrome 应用商店上传扩展程序
1. 进入 Google 开发者中心 网址: https://chrome.google.com/webstore/developer/dashboard?hl=zh-cn 2. 添加新项 上传后,出 ...