之前我们介绍过了三大框架中的Structs和spring,今天我们来介绍一下Hibernate。
一、是什么
1、概念
Hibernate,翻译过来是冬眠的意思,冬眠其实就是维持一种平衡稳定的状态,也就是持久化。
持久化(Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的对象存储在关系型的数据库中,当然也可以存储在磁盘文件中、XML数据文件中等等。
持久化是将程序数据在持久状态和瞬时状态间转换的机制。
2、理解
Hibernate是一个对象关系映射(ORM)框架,它对JDBC进行了非常轻量级的对象封装,使得可以使用对象编程思维
来操纵数据库。
ORM,即Object-Relational Mapping,它的作用就是在关系型数据库和对象之间做了一个映射。从对象(Object)映射到关系(Relation),再从关系映射到对象。这样,我们在操作数据库的时候,不需要再去和复杂SQL打交道,只要像操作对象一样操作它就可以了(把关系数据库的字段在内存中映射成对象的属性)。详见: EntityFramework——Map之初露锋芒(一)
二、有何用
1、作用
Hibernate主要用来实现Java对象和表之间的映射,除此之外还提供还提供数据查询和获取数据的方法,可以大幅度减少开发时人工使用SQL和JDBC处理数据的时间。
Hibernate的目标是对于开发者通常的数据持久化相关的编程任务,解放其中的95%。
对于以数据为中心的程序来说,它们往往只在数据库中使用存储过程来实现商业逻辑,Hibernate可能不是最好的解决方案;对于那些在基于Java的中间层应用中,它们实现面向对象的业务模型和商业逻辑的应用,Hibernate是最有用的。
Hibernate可以帮助你消除或者包装那些针对特定厂商的SQL代码,并且帮你把结果集从表格式的表示形式转换到一系列的对象去。
2、核心
自上而下的调用
Configuration接口
负责配置并启动Hibernate,创建SessionFactory对象。在Hibernate的启动的过程中,Configuration类的实例首先定位映射文档位置、读取配置,然后创建SessionFactory对象。
SessionFactroy接口
负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象。
它是线程安全的,这意味着它的同一个实例可以被应用的多个线程共享。
它是重量级的,这意味着不能随意创建或销毁它的实例。如果应用只访问一个数据库,只需要创建一个SessionFactory实例
Session接口
负责执行被持久化对象的CRUD操作(CRUD:增读更删)。但需要注意的是Session对象是非线程安全的。因此在设计软件架构的时候,应该避免多个线程共享一个Session实例。同时,Hibernate的session不同于JSP应用中的HttpSession。
Query和Criteria接口
Query和Criteria接口负责执行各种数据库查询。它可以使用HQL语言或SQL语句两种表达方式。
Transaction接口
是Hibernate的数据库的数据库事务接口,它对底层的事务接口做了封装。底层事务接口包括:
1.jdbc API
2.JTA(JAVA Transation API)
3.CORBA(Common Object Request Broker Architecture) API
注意: Configuration实例是一个启动期间的对象,一旦SessionFactory创建完成它就被丢弃了。
三、怎么用
1、对应规则
类跟表相对应
类的属性跟表的字段相对应
类的实例与表中具体的一条记录相对应
一个类可以对应多个表,一个表也可以对应对个类
DB中的表可以没有主键,但是Object中必须设置主键字段
DB中表与表之间的关系(如:外键)映射成为Object之间的关系
Object中属性的个数和名称可以和表中定义的字段个数和名称不一样
2、实现方式
之前我们通过jdbc+sql,connection的管理,来跟数据库联系
现在通过封装好的Hibernate实现
四、优缺点
1、优点
(1)更加对象化
以对象化的思维操作数据库,我们只需要操作对象就可以了,开发更加对象化。
(2)移植性
因为Hibernate做了持久层的封装,你就不知道数据库,如果换个数据库只要在配置文件中变换配置就可以了,你写的所有的代码都具有可复用性。
(3)Hibernate是一个没有侵入性的框架,没有侵入性的框架我们称为轻量级框架。
对比Struts的Action和ActionForm,都需要继承,离不开Struts。Hibernate不需要继承任何类,不需要实现任何接口。这样的对象叫POJO对象。
(4)Hibernate代码测试方便。
(5)提高效率,提高生产力。
2、缺点
(1)使用数据库特性的语句,将很难调优
(2)对大批量数据更新存在问题
(3)系统中存在大量的攻击查询功能
(4)复杂表的查询和多表关联查询,效率不高
总结:
我们通过介绍什么是Hibernate,知道了它就是JPA的一种实现,而且我们知道Hibernate是没有侵入性的轻量级框架。通过此次学习,我们对Hibernate有了一个大概的认识,便于我们以后的学习和使用。