一、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. Android FM模块学习之二 FM搜索频道

    最近在学习FM模块,FM是一个值得学习的模块,可以从上层看到底层.上层就是FM的按扭操作和界面显示,从而调用到FM底层驱动来实现广播收听的功能. 看看FM启动流程:如下图: 先进入FMRadio.ja ...

  2. 64位gcc编译32位汇编

    由于使用as和ld来编译链接汇编程序,在使用C库的时候比较麻烦,需要输入比较多的指令,所以使用gcc进行编译链接.由于书中内容是32位汇编程序,但是机器使用的是64位操作系统,自带的gcc也是64位的 ...

  3. Sublime Text 2 安装主题的方法

    主题下载 下载一个主题,例如: https://github.com/hyspace/st2-reeder-theme 里面起作用的文件有两个: Reeder.sublime-theme Earths ...

  4. DPM(Deformable Parts Model)--原理(一)(转载)

    DPM(Deformable Parts Model) Reference: Object detection with discriminatively trained partbased mode ...

  5. android 软键盘不遮挡页面上的控件

    只需要加android:windowSoftInputMode="adjustPan"就可以如: <activity android:name=".Enhance_ ...

  6. 用Python对excel文件的简单操作

    #-*-coding:utf8-*- import xlrd #代开excel文件读取数据 data = xlrd.open_workbook("C:\\Users\\hyl\\Deskto ...

  7. poj 2299 树状数组求逆序对数+离散化

    Ultra-QuickSort Time Limit: 7000MS   Memory Limit: 65536K Total Submissions: 54883   Accepted: 20184 ...

  8. 2015GitWebRTC编译实录3

    2015.05.17 librtprtcp 编译通过[702/1600 ] CXX obj /webrtc/modules/rtp_rtcp/source/rtp_rtcp.bitrate.o[703 ...

  9. leetcode 39 Combination Sum --- java

    Given a set of candidate numbers (C) and a target number (T), find all unique combinations in C wher ...

  10. MySQL复制的基本概念和实现

    MySQL的复制的概念是完成水平扩展的架构 MySQL性能方面的扩展方式有scale on(向上扩展,垂直扩展)                          scale out(向外扩展,水平扩 ...