一、Hibernate是什么

  Hibernate主要用来实现Java对象和数据表之间的映射,除此之外还提供数据查询和获取数据的方法,可以大幅度减少开发时人工使用SQL和JDBC处理数据的时间。Hibernate是一个轻量级的ORMapping框架,ORMapping(Object Relational Mapping)原理简单来说就是将关系型的数据表映射成面向对象实体,参考下图:
  可以从图中很清晰的看到,Tbl_user表格中的每一条记录都可以被映射表为一个UserModel实例对象。
  ORMapping基本对应规则为:

  1、类跟表相对应
  2、类的属性跟表的字段相对应
  3、类的实例与表中具体的一条记录相对应
  4、一个类可以对应多个表,一个表也可以对应对个类(多对多的映射关系)
  5、DB中的表可以没有主键,但是Object中必须设置主键字段
  6、DB中表与表之间的关系(如:外键)映射成为Object之间的关系 
  7、Object中属性的个数和名称可以和表中定义的字段个数和名称不一样(映射对象之间可以有差异)
  ORMapping的基本实现方式:
  使用JDBC,用SQL来操作数据库,只是看自动生成还是人工写代码来实现,其实在很多场景下都有过这样的应用。参见下图所示:
       
 
  左边这张图中表示通过手动方式实现ORMapping,右边这张图表示Hibernate来实现ORMapping。右边这张图很清晰的指出了Hibernate实现对象与数据库表格之间映射关系的奥妙,Hibernate是通过两个关键的xml(配置)文件来得知如何映射对象关系的,所以可以猜测到这两个配置文件应该是非常关键的,并且比人工写JDBC语句来操作数据库肯定简单很多。
二、Hibernate能干什么

  Hibernate的目标是对于开发者通常的数据持久化相关的编程任务,解放其中95%的任务量。对于以数据为中心的程序来说,它们往往只在数据库中使用存储过程来实现商业逻辑,Hibernate可能不是最好的解决方案;但是对于那些在基于Java的中间层应用中,它们实现面向对象的业务模型和商业逻辑的应用,Hibernate是最有用的。Hibernate可以帮助你消除或者包装那些针对特定厂商的SQL代码,并且帮你把结果集从表格式的表示形式转换到一系列的对象去。
  Hibernate在应用架构中的关系参见下图所示:
  Hibernate的高层概要图如下图所示:
  图中可以看出,Application只需操作Hibernate架构中的Persistent Objects即可。针对Database的操作全部交给Hibernate进行处理,而Hibernate又是依靠两个配置参数进行具体的连接,分别是:Hibernate properties(可以理解为上面提到的XXX.cfg.xml)和XML Mapping(对应上面提到的XXX.hbm.xml)。
  我们可以对比一下使用Hibernate的“最小”体系结构和“全面”体系结构的示意图:
  上图中左边表示“最小”体系结构,要求应用程序提供自己的 JDBC 连接并管理自己的事务。这种方案使用了Hibernate API 的最小子集。
  上图中右边表示“全面”体系结构,Hibernate将应用层从底层的JDBC/JTA API中抽象出来,而让Hibernate来处理这些细节。从这个“全面”的Hibernate结构中可以看到有五个“关键模块”,这五个模块表示的含义分别如下:
(1)SessionFactory (org.hibernate.SessionFactory)

  针对单个数据库映射关系经过编译后的内存镜像,是线程安全的(不可变)。 它是生成Session的工厂,本身要用到ConnectionProvider。
(2)Session (org.hibernate.Session)
  表示应用程序与持久储存层之间交互操作的一个单线程对象,此对象生存期很短,隐藏了JDBC连接,也是Transaction的工厂。
(3)Transaction (org.hibernate.Transaction)
  应用程序用来指定原子操作单元范围的对象,它是单线程的,生命周期很短。它通过抽象将应用从底层具体的JDBC、JTA以及CORBA事务隔离开。
(4)ConnectionProvider (org.hibernate.connection.ConnectionProvider)
  生成JDBC连接的工厂(有连接池的作用)。它通过抽象将应用从底层的Datasource或DriverManager隔离开。仅供开发者扩展/实现用,并不暴露给应用程序使用。
(5)TransactionFactory (org.hibernate.TransactionFactory)
  生成Transaction对象实例的工厂。仅供开发者扩展/实现用,并不暴露给应用程序使用。
 
小结:
  本篇文章主要介绍了Hibernate的基本概念和体系结构。
 
 
 

Hibernate入门学习(一)的更多相关文章

  1. Hibernate入门学习-安装hibernate插件

    最近一直在学习ssh框架,为了更方便hibernate的使用,所以在eclipse下载hibernate插件,安装插件有两种方法 第一种:本地安装 1).插件的官网下载地址:http://tools. ...

  2. Hibernate入门学习(二)

    本文主要讲如何搭建Hibernate开发环境和简单实例. 一.搭建开发测试环境 1.1 下载Hibernate 从Hibernate官方网站上下载最新的Hibernate ORM,从Hibernate ...

  3. Hibernate入门学习笔记

    1.Hibernate是什么? 2.hibernate怎么配置? 3.SessionFactory是干什么的?有哪些方法经常用? 4.hibernate的现成的增删改查方法怎么使用?都有哪些方法?哪些 ...

  4. Hibernate入门6.Hibernate检索方式

    Hibernate入门6.Hibernate检索方式 20131128 代码下载 链接: http://pan.baidu.com/s/1Ccuup 密码: vqlv Hibernate的整体框架已经 ...

  5. Hibernate入门5持久化对象关系和批量处理技术

    Hibernate入门5持久化对象关系和批量处理技术 20131128 代码下载 链接: http://pan.baidu.com/s/1Ccuup 密码: vqlv 前言: 前面学习了Hiberna ...

  6. Hibernate入门4.核心技能

    Hibernate入门4.核心技能 20131128 代码下载 链接: http://pan.baidu.com/s/1Ccuup 密码: vqlv 前言: 前面学习了Hibernate3的基本知识, ...

  7. Hibernate入门3.配置映射文件深入

    Hibernate入门3.配置映射文件深入 2013.11.27 前言: 之前的两节是在Java项目中如何使用hibernate,并且通过一个简单地项目实践,期间有很多的错误,一般都是因为配置包的问题 ...

  8. Hibernate入门(1)-第一个Hibernate程序

    Hibernate入门(1)-第一个Hibernate程序 Hibernate是最著名的ORM工具之一,本系列文章主要学习Hibernate的用法,不涉及Hibernate的原理.本文介绍第一个Hib ...

  9. 史上最简单的Hibernate入门简单介绍

    事实上Hibernate本身是个独立的框架,它不须要不论什么web server或application server的支持.然而,大多数的Hibernate入门介绍都加入了非常多非Hibernate ...

随机推荐

  1. 通知(Notification) 、 应用间通信(一)

    1 使用通知中心发送消息 1.1 问题 当一个对象需要向多个接受者发送消息的,或者不用知道消息的接收者是谁,就可以使用IOS提供的NSNotificationCenter通知中心,本案例使NSNoti ...

  2. tinyhttpd-0.1.0_hacking

    /**************************************************************************** * * tinyhttpd-0.1.0_ha ...

  3. 解决"waitForCondition(LockCondition) timed out (identity=23, status=0). CPU may be pegged. trying again."问题

    前几天在跑游戏引擎的时候,遇到了一个比较奇怪的问题,logcat不断地打印下面的错误: waitForCondition(LockCondition) timed out (identity=23, ...

  4. Ubuntu下adb的安装

    1.adb简述: adb全称Android Debug Bridge,安卓调试桥接器.它是Android sdk里的一个工具,用这个工具可以直接操作管理android模拟器或者真实的andriod设备 ...

  5. jni数据传递——会不断的更新,测试没有问题,再整理进来。

    工作中遇到了ndk编程,其实核心就是java和本地的数据交互.现把所有数据类型的传递写成demo. 1,ini数组传递  我们实现传递8个数值过去,然后本地将八个数值放到数组,返回. java代码: ...

  6. 越狱Season 1- Episode 18: Bluff

    Season 1, Episode 18: Bluff -Michael: Scofield Scofield Michael Scofield Michael Scofield -Patoshik: ...

  7. ThinkPHP使用SQL函数进行查询

    //SQL函数查询 $products=$pro->where(array("FIND_IN_SET('".$type."',type)",'num'=& ...

  8. 【SDOI2008】【P1377】仪仗队

    欧拉函数的应用 原题: 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是 ...

  9. Linux驱动设计编译错误信息集锦

    1.warning: passing argument 2 of 'request_irq' from incompatible pointer type http://blog.sina.com.c ...

  10. ssh命令:使用密钥文件进行登陆

    在win上面可以使用XSHELL来登录类似于亚马逊这样的安全服务器,在mac上面就可以使用系统自带的命令工具来连接 1.使用命令 ssh -i key.pem [server] 如下: ssh -i  ...