Hibernate是什么?
Hibernate是一个轻量级(轻/重是就资源耗费程度而言)的ORM框架。
ORM(Object Relational Mapping)原理
![](http://sishuok.com/forum/upload/2012/2/21/bce2ea80efb685abf97a312ebcf61b34__1.JPG)
ORMapping基本对应规则:
1:类跟表相对应;
2:类的属性跟表的字段相对应;
3:类的实例与表中具体的一条记录相对应;
4:一个类可以对应多个表,一个表也可以对应对个类;
5:DB中的表可以没有主键,但是Object中必须设置主键字段;
6:DB中表与表之间的关系(如:外键)映射成为Object之间的关系;
7:Object中属性的个数和名称可以和表中定义的字段个数和名称不一样;
ORMapping的基本实现方式:
没用ORM的实现方式如下图:
![](https://img-blog.csdn.net/20150822170026021?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
运用ORM的实现方式如下图:
![](https://img-blog.csdn.net/20150822170822546?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
HibernateH能干什么?
(1)Hibernate主要用来实现Java对象和表之间的映射,除此之外还提供还提供数据查询和获取数据的方法,可以大幅度减少开发时人工使用SQL和JDBC处理数据的时间。
(2)Hibernate的目标是对于开发者通常的数据持久化相关的编程任务,解放其中的95%(感觉有点夸张)。对于以数据为中心的程序来说,它们往往只在数据库中使用存储过程来实现商业逻辑,Hibernate可能不是最好的解决方案;对于那些在基于Java的中间层应用中,它们实现面向对象的业务模型和商业逻辑的应用,Hibernate是最有用的。
(3)Hibernate可以帮助你消除或者包装那些针对特定厂商的SQL代码,并且帮你把结果集从表格式的表示形式转换到一系列的对象去。
Hibernate运行时体系结构
1.简要的Hibernate体系结构的高层概要图:
要点:
(1)Hibernate位于应用程序和数据库之间;
(2)应用程序和Hibernate通过持久化对象进行交互;
(3)Hibernate运行时需要配置文件,配置可以是properties,也可以是xml;
(4)xml文件进行映射描述。
2.Hibernatei运行时体系结构图:
![](https://img-blog.csdn.net/20150822173227840?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
要点:
(1)Hibernate会使用JDBC、JNDI、JTA等JavaEE技术;
(2)Hibernate包含Session的相关部分;
(3)应用程序和Hibernate进行交互,主要通过Session接口;
3.“全面解决”的体系结构图如下:
Hibernate需要完成的部分如图红色框里面所示:
SessionFactory (org.hibernate.SessionFactory)
针对单个数据库映射关系经过编译后的内存镜像,是线程安全的(不可变)。它是生成Session的工厂,本身要用到ConnectionProvider。
Session (org.hibernate.Session)
表示应用程序与持久储存层之间交互操作的一个单线程对象,此对象生存期很短,隐藏了JDBC连接,也是Transaction的工厂。
Transaction(org.hibernate.Transaction)
应用程序用来指定原子操作单元范围的对象,它是单线程的,生命周期很短。它通过抽象将应用从底层具体的JDBC、JTA以及CORBA事务隔离开。
ConnectionProvider(org.hibernate.connection.ConnectionProvider)
生成JDBC连接的工厂(有连接池的作用)。它通过抽象将应用从底层的Datasource或DriverManager隔离开。仅供开发者扩展/实现用,并不暴露给应用程序使用。
TransactionFactory (org.hibernate.TransactionFactory)
生成Transaction对象实例的工厂。仅供开发者扩展/实现用,并不暴露给应用程序使用。