Hibernate 是一个开放源代码的对象关系映射框架,它对 JDBC 进行了非常轻量级的对象封装,使得 Java 程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate 可以应用在任何使用 JDBC 的场合,既可以在 Java 的客户端程序使用,也可以在 Servlet/JSP 的 web 应用中使用,最具革命意义的是,Hibernate 可以在应用 EJB 的 J2EE 架构中取代 CMP,完成数据持久化的重任。
持久化是将程序数据在持久状态和瞬时状态间转换的机制。JDBC 就是一种持久化机制。文件 IO 也是一种持久化机制。下面通过本文给大家介绍 Java 中 Hibernate 的基本原理,需要的朋友参考下吧
在开始学 Hibernate 之前,一直就有人说:Hibernate 并不难,无非是对 JDBC 进一步封装。一句不难,难道是真的不难还是眼高手低?
如果只是停留在使用的层面上,我相信什么技术都不难,看看别人怎么做的,你也可以很快上手。
这难道是学习的最终目的吗?
不是,绝对不是。我们需要了解这门技术的基本概念,它到底是什么,它是干什么的,它有什么优缺点。下面我就带领大家一起回顾一下 Hibernate:
什么是 Hibernate?Hibernate,翻译过来是冬眠的意思,正好现在已经进入秋季,世间万物开始准备冬眠了。其实对于对象来说就是持久化。
持久化(Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的对象存储在关系型的数据库中,当然也可以存储在磁盘文件中、XML 数据文件中等等。
持久化是将程序数据在持久状态和瞬时状态间转换的机制。
JDBC 就是一种持久化机制。文件 IO 也是一种持久化机制。
日常持久化的方法:1、将鲜肉冷藏,吃的时候再解冻的方法也是。
2、将水果做成罐头的方法也是。
我们从三个角度理解一下 Hibernate: 一、Hibernate 是对 JDBC 进一步封装原来没有使用 Hiberante 做持久层开发时,存在很多冗余,如:各种 JDBC 语句,connection 的管理,所以出现了 Hibernate 把 JDBC 封装了一下,我们不用操作数据,直接操作它就行了。
二、我们再从分层的角度来看我们知道非常典型的三层架构:表示层,业务层,还有持久层。Hiberante 也是持久层的框架,而且持久层的框架还有很多,比如:IBatis,Nhibernate,JDO,OJB,EJB 等等。
三、Hibernate 是开源的一个 ORM(对象关系映射)框架。ORM,即 Object-Relational Mapping,它的作用就是在关系型数据库和对象之间做了一个映射。从对象(Object)映射到关系(Relation),再从关系映射到对象。这样,我们在操作数据库的时候,不需要再去和复杂 SQL 打交道,只要像操作对象一样操作它就可以了(把关系数据库的字段在内存中映射成对象的属性)。
Hibernate 的核心:从上图中,我们可以看出 Hibernate 六大核心接口,两个主要配置文件,以及他们直接的关系。Hibernate 的所有内容都在这了。那我们从上到下简单的认识一下,每个接口进行一句话总结。
1、Configuration 接口: 负责配置并启动 Hibernate
2、SessionFactory 接口: 负责初始化 Hibernate
3、Session 接口: 负责持久化对象的 CRUD 操作
4、Transaction 接口: 负责事务
5、Query 接口和 Criteria 接口: 负责执行各种数据库查询
注意:Configuration 实例是一个启动期间的对象,一旦 SessionFactory 创建完成它就被丢弃了。
Hibernate 的优 / 缺点:优点:1、更加对象化
以对象化的思维操作数据库,我们只需要操作对象就可以了,开发更加对象化。
2、移植性
因为 Hibernate 做了持久层的封装,你就不知道数据库,你写的所有的代码都具有可复用性。
3、Hibernate 是一个没有侵入性的框架,没有侵入性的框架我们称为轻量级框架。
对比 Struts 的 Action 和 ActionForm,都需要继承,离不开 Struts。Hibernate 不需要继承任何类,不需要实现任何接口。这样的对象叫 POJO 对象。
4、Hibernate 代码测试方便。
5、提高效率,提高生产力。
缺点:1、使用数据库特性的语句,将很难调优
2、对大批量数据更新存在问题
3、系统中存在大量的攻击查询功能
总结:Hibernate 可以使我们采用对象化的思维操作关系型数据库。
总结以上所述是小编给大家介绍的 Java 中 Hibernate 的基本原理,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 PHPERZ 网站的支持!
来源: http://www.phperz.com/article/18/0101/353774.html