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 ...
随机推荐
- Python yield与实现
Python yield与实现 yield的功能类似于return,但是不同之处在于它返回的是生成器. 生成器 生成器是通过一个或多个yield表达式构成的函数,每一个生成器都是一个迭代器(但是迭 ...
- MySQL实现嵌套集合模型
MySQL实现嵌套集合模型 译文主要是介绍如何用MySQL来存储嵌套集合数据.在其中会增加一些自己的理解,也会删除掉一些自认为无用的废话. 这篇文章主要讲的是嵌套集合模型,所以邻接表不是本文的重点,简 ...
- Sharing A Powerful Tool For Application Auto Monitor
本文分享的这个应用监控小工具,本来是我在五年多以前开发实现的windows服务监控的一个windows服务.听上去比较拗口吧,是的,这个应用一开始就是个监控windows服务的windows服务. 记 ...
- 老司机学新平台 - Xamarin开发之我的第一个MvvmCross跨平台插件:SimpleAudioPlayer
大家好,老司机学Xamarin系列又来啦!上一篇MvvmCross插件精选文末提到,Xamarin平台下,一直没找到一个可用的跨平台AudioPlayer插件.那就自力更生,让我们就自己来写一个吧! ...
- 2013 duilib入门简明教程 -- 部分bug (11)
一.WindowImplBase的bug 在第8个教程[2013 duilib入门简明教程 -- 完整的自绘标题栏(8)]中,可以发现窗口最大化之后有两个问题, 1.最大化按钮的样式 ...
- DLL导出函数和类的定义区别 __declspec(dllexport)
DLL导出函数和类的定义区别 __declspec(dllexport) 是有区别的, 请看 : //定义头文件的使用方,是导出还是导入 #if defined(_DLL_API) #ifndef D ...
- PHP SESSION机制,从存储到读取
PHP中,如果要获取SESSION数据,必须要有对应的session_id,session_id的获取方式有两种 1.基于客户端的cookie 2.基于url 先说第一种情况,基于客户端的cookie ...
- 对Big Table进行全表更新,导致 Replication 同步数据的过程十分缓慢
在Publisher database中更新一个big table,数据行数是3.4亿多.由于没有更新 clustered Index key,因此,只产生了3.4亿多个Update Commands ...
- 【非愚人】重要通知:04-01 贴吧继PHP资源之后又。。。
贴吧继PHP资源之后又取消了JAVA,IOS等资源的贴,现在专注于Net,C++,Linux,平面设计.主要是为了让广大Net程序员具备全栈全平台牛人的潜力,故而取消那些干扰因素.Net的潜力和活力大 ...
- OpenCascade Eigenvalues and Eigenvectors of Square Matrix
OpenCascade Eigenvalues and Eigenvectors of Square Matrix eryar@163.com Abstract. OpenCascade use th ...