Hibernate和JDBC、EJB比较

news/2024/5/18 22:22:20 标签: hibernate, jdbc, ejb, 持久层框架, bean, dao

 

原创   Hibernate和JDBC、EJB比较 收藏

<script type="text/javascript"> document.body.oncopy = function() { if (window.clipboardData) { setTimeout(function() { var text = clipboardData.getData("text"); if (text && text.length>300) { text = text + "/r/n/n本文来自CSDN博客,转载请标明出处:" + location.href; clipboardData.setData("text", text); } }, 100); } } </script> <script type="text/javascript">function StorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();}</script>

转自forum.javaeye.com

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

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

三、 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个架构来分析:
1、内存消耗:采用JDBC的架构2无疑是最省内存的,Hibernate的架构3次之,EB的架构1最差。

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

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

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

四、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之间来回犹豫不决,甚至搞不清楚的话,程序都没有办法写。


http://www.niftyadmin.cn/n/1050198.html

相关文章

CentOS下DNS搭建

系统&#xff1a;CentOS 6.3配置&#xff1a;[roottest-feng ~]# yum install bind* #安装dns服务[roottest-feng ~]#service iptables stop #关闭防火墙[roottest-feng ~]#chkconfig iptables off #关闭防火墙开机启动[root…

Android---------------解决bug的关键点

一、抛出异常&#xff0c;打出异常的的堆信息 System.err.print("ceshi"); e.printStackTrace(); Log.i("ceshi", "exception "e);转载于:https://www.cnblogs.com/liunx1109/p/9998823.html

ubuntu可视化桌面安装问题

在阿里云安装Ubuntu可视化桌面时&#xff0c;出现问题&#xff1a;Failed to fetch http://mirrors.cloud.aliyuncs.com/ubuntu/pool/main/x/xorg-server/xserver-xorg-core_1.18.4-0ubuntu0.3_amd64.deb 404 Not Found 解决方法是&#xff1a;先用sudo apt-get update命令更…

Polymorphic无处不在@植物大战僵尸2

最近玩了一下植物大战僵尸2&#xff0c;发现里面有一种东西叫"超级炮弹"&#xff0c;这种东西应用到豌豆上&#xff0c;豌豆会狂发&#xff0c;应用到向日葵上&#xff0c;向日葵会狂生产太阳&#xff0c;应用到土豆上&#xff0c;土豆会被裹上厚厚的铁甲。。。。。&…

local和remote的区别

local是本地接口&#xff0c;remote是远程接口。web层调用app层使用remote接口。session bean和entity bean之间调用使用的是local接口。不用说你也明白&#xff0c;remote接口对性能的影响很大。所以在程序设计的时候我们尽量用loacal接口&#xff0c;也就是 facade模式。具体…

paip.提升性能---- 网站并发数的总结.txt

paip.提升性能---- 网站并发数的总结.txt 作者Attilax &#xff0c; EMAIL:1466519819qq.com 来源&#xff1a;attilax的专栏 地址&#xff1a;http://blog.csdn.net/attilax 普通服务器并发数5000 -------------------------- 4G内存 5000并发数 虚拟主机200--500并…

[转] c++11 move 和 forward

[转自 https://www.cnblogs.com/qicosmos/p/3376241.html] 【参考 https://www.cnblogs.com/boydfd/p/5182743.html】 本次要讲的是右值引用相关的几个函数&#xff1a;std::move, std::forward和成员的emplace_back&#xff0c;通过这些函数我们可以避免不必要的拷贝&#xff…

Nginx学习指南之循序渐进(一)

Nginx学习指南之循序渐进&#xff08;一&#xff09;一、简介Nginx(‘engine x’)是一个高性能的HTTP和反向代理服务器&#xff0c;也是一个IMAP/POP3/SMTP代理服务器。Nginx 是由俄罗斯的程序设计师lgor sysoev所开发&#xff0c;将其源码以类BSD许可证的形式发布&#xff0c;…