hibernate框架的结构和分析
来源:互联网 发布:成都租房知乎 编辑:程序博客网 时间:2024/05/09 11:34
在上篇博客中介绍了struts2框架的原理和流程分析,可以说struts框架一路走来,改变非常大,而且让我们开发人员变得更加轻松,里面的设计理念的改变也是让我们编程人员的思路得到更大的扩展。
可以说,一个先进的技术或者框架就是要不断的进步才能永远让编程人员喜欢和使用,一个优秀的编程人员也是要不断的进步才能永远让这个世界变得更加绚丽多彩。
其实编程就是这样有意思的!
前面说了一些宏观上学习框架相关的思想方面的东西,下面继续来介绍我经常使用的框架和框架的分析,这篇博客主要介绍的是hibernate框架。
首先说hibernate框架是数据持久层的框架,这个框架是非常强大的,它让编程人员纯粹的用面向对象的方式来做开发,让编程人员所面对的都是对象。仅仅从这一点它的设计思路就是非常让编程人员喜爱的。
回想我们普通的开发流程,和客户沟通定需求,抽象出来原型,从原型中建立数据模型到库表结构的建立,之后在映射成对象模型,之后在用oo的设计思想完成后续的程序开发。但是当我们使用了hibernate框架以后,原先的设计思路就显得不再那么具有优势了。我们直接建立对象模型,之后利用hibernate框架映射成数据模型,我们不再去考虑数据库关系模型的东西,仅仅考虑的东西仅仅就是类和对象,这样的开发才是面向对象的开发,也才是最接近人类思考问题的方式。所以hibernate框架的设计思路是非常好的。
hibernate框架设计思路的优越性其实体现在了它本身的框架的原理上。hibernate封装了JDBC,减轻了开发人员在持久层的大量重复性工作,它利用了java反射机制来实现程序的透明性;它就是通过这两点才达到从对象出发而非关系数据库出发的效果。
介绍这么多理论性的东西之后我们能够感觉到hibernate框架的强大,来看看它的结构图:
在hibernate框架中有几个比较重要的接口和类:
- Query接口:Query负责执行各种数据库查询。它可以使用HQL语句或SQL语句两种表达方式。
- Configuration类:Configuration类负责配置并启动Hibernate,创建SessionFactory对象
- SessionFactory接口:SessionFactory接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象
- Session接口:Session接口负责执行被持久化对象的CRUD操作
- Transaction接口:Transaction接口负责事务相关的操作
hibernate框架就是在利用这几个接口来封装了JDBC,而且我们用这些接口来操作数据库变得非常简单,减少了我们在持久层的代码量。
从这个结构图和我的一些分析就能发现hibernate框架是非常强大,而且它给我们开发人员的开发带来了非常大的便利,尤其是他的设计思路还有它的“全自动”的映射对象模型和关系模型。
但是hibernate框架也有它的一些缺点:
- 既然是封装了JDBC,所以很明显它没有JDBC的效率高,尤其是在大量的处理表更新操作的时候。
- 它有局限性,一个持久化类不能映射多个表
- 它应对大数量的时候显得非常笨拙,这一点没有JDBC和接下来要介绍的IBatis框架
其实一项技术或者一个框架都有它的优缺点,选择最合适的才是王道。
Hibernate 是一种框架,不过它是不同于 Struts。Xwork等的MVC框架,它是一种ORM框架,与各种数据库,SQL语句打交道,是数据持久化的一种解决方案。
Hibernate 是ORM框架,全称为Object-RaltiveDatabase-Mapping,在java对象与关系数据库之间建立某种映射,以实现存取java一般对象。
ORM的概述
在商业化的开发中,数据持久化是比较核心的技术之一。传统的数据持久化的编程中,需要使用jdbc并配合大量的sql 语句。Connection ,Statement,ResultSet等JDBC API
与SQL语句夹在一起,开发效率比较低,后来出现DAO模式,把所以的JDBC API 和SQL语句移到DAO层,但是这样仍然变现大量的SQL语句,开发业务比较复杂,数据表繁多。由于DAO层的工作很有规律,例如在插入数据的时候只要把POJO拆成各种属性然后拼装成SQL语句就可以了,读取数据的时候,就是用SQL语句把POJO的各种属性从数据表中拿出,拼装成POJO对象就可以了。而ORM也就是做这种工作的框架,它通过配置文件或者JAVA注解把java对象映射到数据库上,自动执行SQL语句并执行。类似的框架有SUN的JDO,Oracle公司的TopLink等
Hibernate 的优点:
使用简单,功能强大,对大多数的数据库都提供支持,它可以直接操作POJO,并且是一种轻量级的抗拒,不依赖于如何容器,无论是Tomcat还是Joss,Ression,WebLogic,WebSohere下都可以使用。通过映射文件保存映射信息,这样只需要少量代码就可以完成持久化工作,以面向对象的方式编程,不用考虑数据保存形式。Hibernate 简化了JDBC 繁琐的编码Hibernate的官方网站是http://www.hibernate.org/
Hibernate的原理
Hibernate的工作原理和JDBC编程一样,通过insert 插入数据,Select 查询数据。Delete的删除数据 update的更新数据,不过hibernate充当DAO层,根据POJO与实体类的映射配置自动生产SQL语句。
在此提及一下数据的两种状态,瞬时态和持久状态。瞬时态就是在程序关闭之后数据就会自动消失,重新运行程序后有重新创建。持久态就是在关闭程序后不会消失,经常保存在数据库中或者磁盘上。持久化就是把保存在内存中的数据从瞬时态转换成持久状态
为了解决瞬时态到持久状态的转换,我们有两种解决方法:
1 使用JDBC手工转换
2 使用ORM框架来解决,主流框架是hibernate,JDO,TooLic
在使用ORM框架的时候,需要注意对象关系映射的问题。 对象关系映射是随着面相对软件开发而产生的。有两个特征(个人总结)
(1) 对象和关系数据是业务实体的两种表现形式。业务实体在内存中表现为对
象,在数据库中表现为关系数据。
(2) 两者存在一定的对应关系
表-类
字段-属性
记录-对象:回想JDBC编程,查询一条记录时,封装成一个实体对象。查询多条记录时,对应的集合。
一般的ORM包括
一个对持久类对象进行C(Create)R(Read)U(Update)D(Delete)操作的API
一个语言或API用来规定与类和类属性相关的查询(HQL)
一个规定mappingmetadata的工具:元数据,可以实现两个方向的自动转换。
下面我们来看一下Hibernate的体系结构,如图
从上面我们可以看出Hibernate的使用数据库和配置信息来为应用程序提供持久化的服务,由于Hibernate的十分灵活,所以我们描述两种极端。。“轻型”体系结构要求应用程序自己提供jdbc连接并管理自己的事务。这个是Hibernate API的最小子集。如图
"全面解决"的体系方案,要求应用程序从jdbc/jta APT 中抽象出来,让Hibernate 全面操作这个细节。
定义如下:
- hibernate框架的结构和分析
- 框架学习:hibernate框架的结构和分析
- 框架学习:hibernate框架的结构和分析
- 框架学习:struts1框架的结构和分析
- 框架学习2-常见框架的结构和分析2 .
- 框架学习:ibatis框架的结构和分析
- 框架学习:ibatis框架的结构和分析
- 框架学习:struts1框架的结构和分析
- 框架学习:webWork框架和struts2框架的结构和分析
- 框架学习:webWork框架和struts2框架的结构和分析
- 框架学习:ibatis框架和hibernate框架区别分析
- phpcms v9框架的目录结构分析
- phpcms v9框架的目录结构分析
- Struts2框架的结构分析和简单的登入示例
- java中从Spring、Hibernate和Struts框架的action、service和dao三层结构异常处理体系设计
- spring+hibernate+struts2; spring +mybaits+struts2框架分析和搭建
- 持久化框架ibatis、hibernate和Jpa优缺点分析
- OJB和Hibernate框架的评议一
- HDU-2544-基础最短路
- js中substring和substr的用法
- spring web项目 数据库用户名密码加密解密
- mysql主从同步Slave_SQL_Running: No,Last_Errno: 1062的解决方法
- CodeForces - 595B Pasha and Phone (数学技巧)好题
- hibernate框架的结构和分析
- linux下进程的最大线程数、进程最大数、进程打开的文件数
- 汇编语言转移指令规则汇总
- Mac/Linux编译OpenCV程序
- bower list报错 Getting random ECMDERR errors
- JAVA学习【11】Servlet基础知识
- MyEclipse生成javadoc时出错:编码GBK的不可映射字符"解决办法
- JavaScript Number 对象
- python strip()函数 介绍