一、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的基本概念和体系结构。