- 浏览: 340356 次
- 性别:
- 来自: 广州
文章分类
最新评论
hibernate,通过对jdbc进行封装,对 java类和关系数据库进行mapping,实现了对关系数据库的面向对象方式的操作,改变了传统的jdbc + sql操作数据的方式,从而使开发人员可以话更多精力进行对象方面的开发,好处并不只是简化了数据库操作,更有价值的事对不同的数据库提供了统一操作的接口,使应用程序的跨数据库开发成为可能。
1.什么是ORM
ORM的全称是Object Relational Mapping,即对象关系映射。它的实现思想就是将关系数据库中表的数据映射成为对象,以对象的形式展现,这样开发人员就可以把对数据库的操作转化为对这些对象的操作。因此它的目的是为了方便开发人员以面向对象的思想来实现对数据库的操作。
2.什么是Hibernate
对于Hibernate的称呼有很多,比如工具、技术、框架以及解决方案等,这些都可以,重要的是大家要知道它的作用。在这里我习惯性称它为框架,它是一种能实现ORM的框架。能实现ORM这个功能的框架有很多,Hibernate可以说是这些框架中最流行、最受开发者关注的,甚至连JBoss 公司也把它吸收进来,利用它在自己的项目中实现ORM功能。
3.ORM的实现原理
现在在Java领域大家对Hibernate的讨论很多,比如它的优缺点、如何应用、错误如何解决以及把它和Struts/Spring等框架相结合作为整个系统的解决方案。在这里我想和大家探讨一些更深层次的话题,那就是Hibernate是如何实现ORM的功能?如果让我们自己开发一款实现 ORM功能的框架需要怎么做?其实这些问题就是围绕着一个词,那就是“映射”,如果我们知道如何实现这种映射那么我们也能够开发出自己的一款ORM框架。会使用Hibernate的开发人员都知道,在使用它实现ORM功能的时候,主要的文件有:映射类(*.java)、映射文件(*.hbm.xml)以及数据库配置文件(*.properties或*.cfg.xml),它们各自的作用如下。
⑴映射类:它的作用是描述数据库表的结构,表中的字段在类中被描述成属性,将来就可以实现把表中的记录映射成为该类的对象。
⑵映射文件:它的作用是指定数据库表和映射类之间的关系,包括映射类和数据库表的对应关系、表字段和类属性类型的对应关系以及表字段和类属性名称的对应关系等。
⑶数据库配置文件:它的作用是指定与数据库连接时需要的连接信息,比如连接哪中数据库、登录用户名、登录密码以及连接字符串等。
在这三种主要的文件中,映射类为普通Java源文件、映射文件为XML格式、数据库配置文件为Properties格式或者是XML格式。想理解“映射”首先我们需要知道如何解析这三种文件,即解析XML格式文件、解析Properties格式文件和解析Java类文件。
下面我们来分别探讨一下如何实现这些文件的解析。
⑴如何解析XML文件
前面我们说过映射文件是XML格式,数据库配置文件也可以是XML格式,因此如果能解析XML文件我们就可以获取这两个文件的信息。XML文件格式我简单做下介绍,比如<name sex=”male”>tom</name>这句就是一个XML格式的描述,name代表节点,节点必须有开始标记<name& gt;和结束标记</name>,在开始标记中我们可以添加一些属性的声明比如sex。解析XML的技术可以分为两类那就是SAX和DOM,这两种方式的差别和优缺点大家可以上网查阅或者我们会在以后的文章中提出,请大家关注。实现解析XML文件的功能很方便,我们可以通过下载第三方的一些工具包如xml-apis.jar和xercesImpl.jar等,也可以使用JDK自带的工具类DocumentBuilderFactory、 DocumentBuilder、Document、Element等等,大家可以通过API文挡查阅这些类的说明。通过这些类我们可以把XML文件的信息读入内存并通过类中的某些方法获取指定节点的名字、值、属性名、属性值这些信息。
⑵解析Properties文件
数据库配置文件可以是XML格式也可以是Properties格式,Properties文件一般采用“属性名=属性值”的形式描述信息。如果配置文件采用Properties文件描述,我们就需要想办法解析这种类型的文件了。想解析Properties文件大家就需要熟悉Properties这个类了,这个类有一些常用方法比如,load()加载指定文件并读取文件中的属性信息,PropertyNames()返回所有属性名,getProperty()返回指定属性名的属性值。通过解析Properties文件我们可以得到连接数据库必要的信息,然后通过底层JDBC技术与数据库建立连接。
⑶解析Java类文件
通过解析映射文件和数据库配置文件我们可以建立数据库的连接,可以得到映射类的名字、属性名、数据库表名、字段名以及类型等信息。要把数据库中表的数据映射成为对象,首先需要把表中的记录取出,然后将每个字段值给映射类对象的每个属性,这个赋值过程要调用对象中的set方法。我们现在通过映射文件只知道类名和属性名,如何根据类名和属性名调用相应的set和get方法,是一个关键问题。在Java中有一种机制叫反射机制,使用这种机制我们可以得到类的信息,包括类只用的修饰符、方法、属性、继承的父类以及实现接口等信息。反射机制相关的类有Class、Field、Method以及 Constructor等。通过Class的getFields()、getMethods()和getConstructors()方法得到相应的属性、方法和构造方法。通过Field类的getName()、getType()和getModifiers()方法得到相应的属性名、属性类型、属性修饰符信息。通过Method类getReturnType()可以获取方法的返回类型,invoke()方法可以根据给定的方法名和参数值执行对象中对应的方法。我们可以首先通过以上方法获取类中的属性名,然后拼写成setXXX和getXXX方法名,最后根据方法名执行对应的方法,将数据库数据加载到对象中。
此外要实现Hibernate机制还会涉及到一个技术点,那就是如何获取数据库的相关信息。要实现这个功能,就需要大家了解JDBC的 DataBaseMetaData类和ResultSetMetaData类,通过这两个类的方法我们就可以获取数据库表的字段名、类型、大小等相关信息。
在这里我只是给大家把实现ORM功能的一些关键技术提了出来,通过上面介绍大家对ORM机制应该有个大概了解,比如通过解析数据库配置文件获取数据库连接信息并建立连接,通过解析映射文件可以获取映射类名、属性名、表名以及字段名等信息,得到名字后通过反射机制可以得到映射类信息,调用构造方法创建对象,调用每个属性的set方法给对象设值完成数据的装载。Hibernate就是采用这个过程来实现ORM的,当然Hibernate还使用了事务控制、缓存控制等很多技术
发表评论
-
Mina重连
2014-05-26 21:29 2923import com.sun.swing.internal. ... -
面试经典
2014-05-24 09:29 6431.mysql innodb引擎,什么叫聚集索引,与非聚集索 ... -
一拍网网站系统架构图
2014-03-28 21:24 618一拍网网站系统架构图 -
Window下安装配置nginx
2013-08-12 16:53 806安装:http://www.cnblogs.com/wen ... -
使用线程池的好处
2013-07-18 14:41 1248使用线程池有两个好处: 1.可以创建和销毁线程所带来的系统 ... -
Java ThreadLocal使用浅析
2013-07-18 14:36 478ThreadLocal通过在其内部保存变量的副本,并且各个副本 ... -
MyBatis学习之简单增删改查操作、MyBatis存储过程、MyBatis分页、MyBatis一对一、MyBatis一对多
2013-07-05 13:06 1173http://blog.csdn.net/zhangwei ... -
分享一位网友的架构杂谈
2013-05-20 23:16 910不容类型的网站,并发处理不一样,例如针对sns这种类型的网站 ... -
JSP页面静态化
2013-04-08 09:20 887http://www.java-zone.org/644.ht ... -
Java compile to C++
2013-03-19 14:53 504http://code.google.com/a/eclips ... -
几个TCP Socket的通信框架
2013-03-19 12:26 995http://www.oschina.net/p/simple ... -
宝贝鱼
2013-03-18 23:54 687http://code.google.com/p/cshbbr ... -
将Java程序注册成系统服务(NT服务)
2013-03-16 16:14 603http://blog.csdn.net/small____f ... -
Java内存回收机制
2013-03-13 15:47 813http://www.iteye.com/blogs/tag/ ... -
支付宝,百付宝集成
2013-03-13 14:01 966http://help.alipay.com/support/ ... -
SSH+EXTJS项目下载
2013-03-11 23:02 437http://download.csdn.net/tag/Ex ... -
Hibernate中使用Threadlocal创建线程安全的Session
2013-03-04 20:39 588http://blog.sina.com.cn/s/blog_ ... -
Java Socket多线程通信
2012-10-09 09:53 839当Server没接受到一个Client连接请求之后,都把处理流 ... -
Java 多线程的一个例子
2012-10-09 09:48 1022目录: 1 synchronized的 ... -
app引擎
2012-07-10 09:39 0http://sae.sina.com.cn/ htt ...
相关推荐
【Hibernate工作原理】 Hibernate是一个ORM(Object-Relational Mapping)框架,它将Java对象与关系数据库的数据进行映射,实现了对象与数据库之间的一套映射规则。其主要工作流程包括: 1. 加载并解析配置文件和...
通过上述分析,我们可以清晰地了解到 Hibernate 的体系结构及其工作原理。这些知识点对于理解 Hibernate 如何高效地处理数据库操作至关重要,同时也为我们提供了使用 Hibernate 时需要注意的关键点。
首先,让我们详细了解SSH框架的各层及其工作原理: 1. **表现层(Presentation Layer)**: - 使用Struts框架,它遵循MVC(Model-View-Controller)设计模式。Struts控制器接收用户请求,调度业务逻辑并返回响应到...
本项目通过Java的反射和注解技术,试图模拟Hibernate的部分功能,以便更好地理解和掌握ORM的核心原理。 1. **Java反射**: 反射是Java提供的一种强大的动态类型特性,允许程序在运行时获取类的信息(如类名、属性、...
- Hibernate EntityManager:基于JPA(Java Persistence API)的实现,提供了ORM服务,可以与Java EE或Java SE环境集成。 - Hibernate Tools:一套辅助工具,包括Hibernate逆向工程,用于从现有数据库生成实体类和...
接下来,我们将详细探讨这三个框架的工作原理及其使用理由。 首先,Struts是MVC(Model-View-Controller)设计模式的一种实现,主要用于控制应用程序的流程。在Struts中,Controller组件负责接收HTTP请求,解析请求...
3. Hibernate工作原理: Hibernate 是一个流行的Java ORM(Object-Relational Mapping)框架,它简化了数据库操作,使开发者能够以面向对象的方式处理数据。其工作流程如下: - 应用程序创建SessionFactory,这是...
标题"hibernate3.jar及其源代码文件"指出,这是一个关于Hibernate 3的资源包,包含了hibernate3.jar这个核心库的二进制版本以及对应的源代码。Hibernate是一个非常重要的Java持久化框架,它简化了数据库操作,使得...
#### 二、Struts框架及其工作原理 Struts框架基于Java EE平台,遵循MVC设计模式,为Web应用提供了一个结构清晰的开发框架。其核心优势在于将视图、控制器与模型三个层次清晰分离,从而达到高内聚、低耦合的效果。 ...
Action类中的方法处理分页逻辑,DAO接口及其实现负责数据库操作,实体类映射数据库表结构,配置文件定义了Action和视图的映射,JSP页面用于展示数据和分页导航。 总的来说,使用Struts和Hibernate实现分页功能,...
- **ThreadLocal**:线程局部变量的应用场景及其实现原理。 - **多线程并发控制框架**:构建高效的多线程程序所需的理论知识和技术栈。 11. **Spring本地化支持**:Spring提供了强大的国际化支持,包括消息国际化...
当对象被保存、更新或删除时,Hibernate自动处理SQL语句,实现对象的持久化。 - **Session**:Hibernate的Session接口是与数据库交互的主要接口,负责对象的创建、查询、更新和删除操作。 - **Criteria查询**:...
在IT行业中,Spring和...这个过程涵盖了Java Web开发中的许多基础概念和技术,对于理解和掌握这两个框架的工作原理及其协同工作方式具有重要意义。学习和实践这一过程,有助于提升你在企业级应用开发中的技能。
本书《Beginning Hibernate, 3rd Edition》旨在为初学者提供一个系统学习 Hibernate 的平台,不仅涵盖了基础概念和技术细节,还提供了大量的实践案例,有助于读者深入理解并掌握 Hibernate 的核心原理及使用技巧。...
在具体实现过程中,首先需要配置Struts 2 的struts.xml文件,定义各个Action及其对应的方法。接着,创建Hibernate的实体类并编写对应的映射文件(hbm.xml),然后配置Hibernate的SessionFactory,连接数据库。最后,...
本文将深入探讨Hibernate校验的原理、使用方法及其在实际开发中的应用。 一、Hibernate校验介绍 Hibernate校验,是Hibernate框架的一个扩展,它允许开发者在数据持久化之前对对象进行验证,确保数据的正确性和完整...
《Hibernate3.2中文说明及其源码》 Hibernate是一个开源的对象关系映射(ORM)框架,它极大地简化了Java应用程序与数据库之间的交互。在Hibernate3.2版本中,该框架进一步提升了性能和稳定性,同时也引入了一些新的...
3. **Criteria 和 HQL 查询**:除了 SQL,Hibernate 还提供了 Criteria API 和 HQL(Hibernate 查询语言)来查询数据,源码可以解释这些高级查询机制的工作原理。 4. **二级缓存**:Hibernate 支持缓存策略,通过...
Struts2和Hibernate是两种非常重要的Java开源框架,它们在Web开发中有着广泛的应用。Struts2是一个MVC(Model-View-...对于初学者,这是一个很好的起点,可以深入理解这两个框架的工作原理及其在实际项目中的应用。
标题中的“类似Hibernate的工具”指的是在IT领域中与Hibernate相似的Object-Relational Mapping(ORM)框架。...因此,对于Java开发者来说,深入理解Hibernate及其同类工具的原理和实践,是提升技能的重要一环。