hello Hibernate

作者: 通俗易懂r | 来源:发表于2017-09-13 15:01 被阅读10次

最近学习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应用。
http://www.jianshu.com/p/548c9706433f

相关文章

网友评论

    本文标题:hello Hibernate

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