Hibernate和JDBC、EJB比较

参考:http://m.blog.csdn.net/article/details?id=7228061程序员

 1、Hibernate是JDBC的轻量级的对象封装,它是一个独立的对象持久层框架,和App Server,和EJB没有什么必然的联系。Hibernate能够用在任何JDBC可使用的场合,例如Java应用程序的数据库访问代码,DAO接口的实现类,甚至能够是BMP里面的访问数据库的代码。从这个意义上来讲,Hibernate和EB不是一个范畴的东西,也不存在非此即彼的关系。 

2、Hibernate是一个和JDBC密切关联的框架,因此Hibernate的兼容性和JDBC驱动,和数据库都有必定的关系,可是和使用它的Java程序,和App Server没有任何关系,也不存在兼容性问题。 

3、Hibernate不能用来直接和Entity Bean作对比,只有放在整个J2EE项目的框架中才能比较。而且即便是放在软件总体框架中来看,Hibernate也是作为JDBC的替代者出现的,而不是Entity Bean的替代者出现的,让我再列一次我已经列n次的框架结构: 

传统的架构: 
1) Session Bean <-> Entity Bean <-> DB 
为了解决性能障碍的替代架构: 
2) Session Bean <-> DAO <-> JDBC <-> DB 
使用Hibernate来提升上面架构的开发效率的架构: 
3) Session Bean <-> DAO <-> Hibernate <-> DB 

就上面3个架构来分析: 
一、内存消耗:采用JDBC的架构2无疑是最省内存的,Hibernate的架构3次之,EB的架构1最差。 

二、运行效率:若是JDBC的代码写的很是优化,那么JDBC架构运行效率最高,可是实际项目中,这一点几乎作不到,这须要程序员很是精通JDBC,运用Batch语句,调整PreapredStatement的Batch Size和Fetch Size等参数,以及在必要的状况下采用结果集cache等等。而通常状况下程序员是作不到这一点的。所以Hibernate架构表现出最快的运行效率。EB的架构效率会差的很远。 

三、开发效率:在有JBuilder的支持下以及简单的项目,EB架构开发效率最高,JDBC次之,Hibernate最差。可是在大的项目,特别是持久层关系映射很复杂的状况下,Hibernate效率高的惊人,JDBC次之,而EB架构极可能会失败。 

四、分布式,安全检查,集群,负载均衡的支持 
因为有SB作为Facade,3个架构没有区别。 

4、EB和Hibernate学习难度在哪里? 

EB的难度在哪里?不在复杂的XML配置文件上,而在于EB运用稍微不慎,就有严重的性能障碍。因此难在你须要学习不少EJB设计模式来避开性能问题,须要学习App Server和EB的配置来优化EB的运行效率。作EB的开发工做,程序员的大部分精力都被放到了EB的性能问题上了,反而没有更多的精力关注自己就主要投入精力去考虑的对象持久层的设计上来。 

Hibernate难在哪里?不在Hibernate自己的复杂,实际上Hibernate很是的简单,难在Hibernate太灵活了。 

当你用EB来实现持久层的时候,你会发现EB实在是太笨拙了,笨拙到你根本没有什么能够选择的余地,因此你根本就不用花费精力去设计方案,去平衡方案的好坏,去费脑筋考虑选择哪一个方案,由于只有惟一的方案摆在你面前,你只能这么作,没得选择。 

Hibernate相反,它太灵活了,相同的问题,你至少能够设计出十几种方案来解决,因此特别的犯难,究竟用这个,仍是用那个呢?这些方案之间到底有什么区别呢?他们的运行原理有什么不一样?运行效率哪一个比较好?光是主键生成,就有七八种方案供你选择,你为难不为难?集合属性能够用Set,能够用List,还能够用Bag,到底哪一个效率高,你为难不为难?查询能够用iterator,能够用list,哪一个好,有什么区别?你为难不为难?复合主键你能够直接在hbm里面配置,也能够自定义CustomerType,哪一种比较好些?你为难不为难?对于一个表,你能够选择单一映射一个对象,也能够映射成父子对象,还能够映射成两个1:1的对象,在什么状况下用哪一种方案比较好,你为难不为难? 

这个列表能够一直开列下去,直到你不想再看下去为止。当你面前摆着无数的眼花缭乱的方案的时候,你会以为幸福呢?仍是悲哀呢?若是你是一个负责的程序员,那么你必定会仔细研究每种方案的区别,每种方案的效率,每种方案的适用场合,你会以为你已经陷入进去拔不出来了。若是是用EB,你第一秒种就已经作出了决定,根本没得选择,好比说集合属性,你只能用Collection,若是是Hibernate,你会在Bag,List和Set之间来回犹豫不决,甚至搞不清楚的话,程序都没有办法写。数据库

 

 

经常使用的数据库操做包括:JDBC、EJB、JDO以及Hibernate。它的各有优缺点: 

   (1) JDBC:多数Java开发人员是用JDBC来和数据库进行通讯,它能够经过DAO模式进行改善和提升。但这种方式在大型应用程序中不容易操做使用,且维护起来至关困难。 

   (2) EJB:EJB一般是在数据持久技术上的第二个选择,它是经过entitybeans来对数据进行持久化。首先就须要购买一个价位合理的EJB容器一J2EE应用服务器,也能够采用开源项目的免费EJB容器,好比JBOSS。可是不少商业EJB容器的性能和技术支持不太好,在EJB中实现JDBC也比较复杂。 

   (3) JDO:JDO的出现彷佛有了一些改观,可是,JDO没有一个好的开源免费实现。好的产品部是商业产品,而且在国内没有销售和技术支持。JDO也不是一个轻量级封装.它创建的持久层框架,很不完善。再加上JDO的标准还很不完善以及严重的产品分裂问题,使得不少操做方式非常烦琐。 

   (4) Hibernate:Hibernate这种持久框架在某些方面有很大的不一样,它不须要任何容器,提供简单易用的API,也解决了JDO的不少缺陷。做为一个良好的ORM ,它有以下特色: 

透明地提供对象与关系数据库的映射,以统一的接口方式支持多种数据库。 

缓存机制,复杂的缓存机制和锁定策略,使针对数据库操做大大减小。 

开源免费的License,能够在须要的时候研究源代码,改写源代码,进行功能的定制。 

轻量级封装,避免引入过多复杂的问题,容易调试,减轻程序员的负担。 

具备可扩展性,API开放,当自己功能不够用的时候,能够自行编码扩展。 

开发者活跃,产品有稳定的发展保障。
设计模式

相关文章
相关标签/搜索