hello Hibernate

最近学习java 学到了Hibernate想把学习的痕迹做个纪录,当做是笔记也行
本学习过程是围绕一本书进行的《精通hibernate》 孙卫琴版

书的开头一些概念性东西,暂时不做纪录。后面有时间再整(呵呵)
直接从2.4开始

2.4 Hibernate API 简介

Hibernate API 接口可分为一下几类

1.提供数据库操作的 增删改查的接口(Session、Transaction、Query)
2.用户配置Hibernate的接口:Configuration
3.使应用程序拦截Hibernate内部发生的事件
(Interceptor、LoadEventListener 和 SaveEventListener接口等)

  1. 用于扩展Hibernate功能的接口
另外Hibernate并没有完全封装jdbc也就是说程序可以绕过hibernate而直接使用jdbc来操作数据库

2.4.1 Hibernate 的核心接口

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

  • Configuration 接口:配置Hibernate、根启动Hibernate、创建SessionFactory对象
  • SessionFactory 接口:初始化Hibernate 充当数据存储源的代理,创建Session对象
  • Session 接口:负责保存、更新、删除、加载和查询对象
  • Transaction 接口:事务管理
  • Query 和 Criteria 接口:执行数据库查询
5.png
  1. Configuration 接口
    Configuration 对象用于配置并且根启动Hibernate,Hibernate通过Configuration实例来获取对象-关系映射文件中的元数据以及动态配置Hibernate的属性然后创建SessinFactory实例
    (这个元数据是啥意思网上查询了下有人这样说:Hibernate中有一个非常丰富的元数据模型,含有所有的实体和值类型数据的元数据 大概意思就是这个“ 玩意儿可以获取当前实体的某些配置和信息 这些信息参数不是一般的多哦”)

  2. SessionFactory 接口
    一个SessionFactory实例对应一个数据存储源,应用从SessionFactory中获取Sessin实例。SessionFactory有一下特点:

  • 它是线程安全的(好高端),意思就是说 它的同一个实例可以被应用的多个线程共享。
  • 它是重量级的,这意味着不能随意创建或销毁它的实例,如果应用只访问一个数据库,只需要创建一个SessinFactory实例,在应用初始化的时候创建该实例。如果应用同时访问多个数据库,则需要为每个数据库创建一个单独的SessionFactory实例。

之所以说SessinFactory 是重量级的,是应为它需要一个很大的缓存,用来存放预定义的SQL语句及映射元数据等。用户还可以问SessionFactory配置一个缓存插件,这个缓存被称为Hibernate的二级缓存,该缓存用来存放被工作单元度过的数据将来其他工作单元可能会 重用这些数据。因此这个缓存中的数据能被所有工作单元共享。一个工作单元通常对应一个数据库事物

  1. Session 接口
    上面已经说了Session 是从SessionFactory实例中获取来的,那么Sessin是干什么的呢,Session接口是Hibernate应用最广泛的接口,(好像是真的,之前自己做示例的时候确实用的多)。Session也被称为持久化管理器,它提供了和持久化相关的操作,保存、更新、删除、加载和查询对象。
    接下来说下Sessin的特点:
  • Session不是线程安全的,因此设计软件架构时,应该避免多个线程共享同一个Session实例。(什么鬼!管它呢,记住就好,联想SessionFactory是线程安全的,可共享)。
  • Session实例是轻量级的,所谓轻量级,是指它的创建和销毁不需要消耗太多的资源。这意味着程序中可以经常创建和销毁Sessin对象(突然想到之前对SessionFactory频繁做close操作,以后的注意了),如为每个客户请求分配单独的Session实例,或者为每个工作单元分配单独的Sessin实例。

Sessin有一个缓存,被称为Hibernate的一级缓存,它存放被当前工作单元加载的对象。每个Sessin都有自己的缓存,这个Session实例的缓存只能被当前工作单元访问。

  1. Transaction 接口
    Transaction 接口是Hibernate的数据库事务接口,它对底层的事务接口做了封装,底层事务接口包括:
  • JDBC API
  • JTA (Java Transaction API )
  • CORBA ( Common Object Requet Broker Architecture) API
    Hibernate 应用可通过一致的Transaction 接口来声明事物边界这有助于应用在不同环境中移植。
Paste_Image.png
  1. Query 和 Criteria 接口
    Query和Criteria 接口是Hibernate的查询接口,用于向数据库查询对象,以及控制执行查询的过程。Query 实例包装了一个HQL (Hibernate Query Language)查询语句,HQL和SQL查询语句有些相似,但HQL是面向对象的,它引用类名及类的属性名,而不是表名和表字段。Criteria接口完全封装了基于字符串形式的查询语句,比Query更加面向对象,Criteria接口擅长于执行动态查询。

2.4.2 事件处理接口

本小结内容比较少,主要是提点一下。详细还得到后面说。
当程序通过 Hibernate来加载、保存、更新或者删除对象时,会触发Hibernate的拦截器及事件监听器做出响应的处理。
我理解为,当我们对数据或者对象做操作的同时,可以做做其他事儿,而谁来告诉我呢,那么就是本小结所说的时间处理接口啦

  • 事件及事件监听接口:在Hibernate API 针对没没一种事件都有相应的时间监听器,如加载对象时触发org.hibernate.event.LoadEvent事件、该事件由org.hibernate.event.LoadEventListener监听处理。等等

  • org.hibernate.Interceptor 接口:应用程序可以实现Interceptor接口的类,Interceptor实现类负责响应持久化类的实例被加载、保存、更新或删除的事件。
    (9.2章节会详细说明 Interceptor接口)

2.4.3 Hibernate 映射类型接口

org.hibernate.type.Type接口表示Hibernate映射类型,用于把域对象映射为数据库的关系数据。Hibernate 为Type接口提供了各种实现类。它们代表具体的HIbernate映射类型,例如:

  • PrimitiveType 类:映射Java基本类型包括了
    • ByteType
    • ShortType
    • IntegerType
    • LongType
    • FloatType
    • DoubleType
    • CharacterType
    • BooleanType
  • DateType:映射java日期类型。
  • BinaryType: 映射Byte[]类型
Paste_Image.png

该节内容还是要掌握的,有用的着的地方。比如传参数的时候类型怎么弄该怎么绑定都是有讲究滴。具体我们到后面的实战演练的时候在用。

Hibernate 还允许用户以实现UserTypeCompositeUserType接口的方式,定义客户化映射类型,详细后面介绍。

本篇文章就到这儿了,下一篇文章将会创建 一个Hibernate应用。
//www.greatytc.com/p/548c9706433f

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,319评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,801评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,567评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,156评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,019评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,090评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,500评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,192评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,474评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,566评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,338评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,212评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,572评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,890评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,169评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,478评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,661评论 2 335

推荐阅读更多精彩内容

  • Hibernate: 一个持久化框架 一个ORM框架 加载:根据特定的OID,把一个对象从数据库加载到内存中OID...
    JHMichael阅读 1,948评论 0 27
  • Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库...
    兰缘小妖阅读 1,195评论 1 18
  • 这部分主要是开源Java EE框架方面的内容,包括Hibernate、MyBatis、Spring、Spring ...
    杂货铺老板阅读 1,316评论 0 2
  • 本文包括: 1、CRM 项目的整体介绍 2、Hibernate 框架概述 3、Hibernate 快速入门 4、H...
    廖少少阅读 3,461评论 9 66
  • 由于去年给自己的孩子们申请到四万科研经费,年中评审两万没花完,原因有一点孩子们自己没那么多自由现金流来垫,另外一点...
    星河涛声99阅读 324评论 0 0