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

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

常用的数据库操作包括: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开放,当本身功能不够用的时候,可以自行编码扩展。

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

转载于:https://www.cnblogs.com/liqun-12345/p/5588309.html

Hibernate和JDBC、EJB比较相关推荐

  1. hibernate和jdbc的优缺点,概述

    1.分析hibernate和jdbc的优缺点 jdbc的优点和缺点 缺点 1.查询代码特别繁琐 2.重复性代码特别多,频繁的try,catch 3.没有做到数据的缓存 4.sql的移植性不好(mysq ...

  2. spring 同时配置hibernate and jdbc 事务

    http://blog.csdn.net/mypop/article/details/6120377 在项目中同时用到了JDBC和Hibernate,分别配置了各自的事务,同时配置了不同的tx:ann ...

  3. 我们如何意外地将Hibernate的JDBC流量增加了一倍

    这篇文章描述了我最近使用Hibernate ORM的经验. 多年以来,该框架并没有让我感到惊讶,您可能会在使用它时遇到性能问题. 我以为我已经看完了,但是这次我又措手不及了. 该问题的基础是在对一个完 ...

  4. 作为一个程序员,hibernate和jdbc 有什么不一样的点,你知道吗

    1.hibernate和jdbc主要区别就是,hibernate先检索缓存中的映射对象( 即hibernate操作的是对象),而jdbc则是直接操作数据库. 2.Hibernate是JDBC的轻量级的 ...

  5. org.hibernate.TransactionException: JDBC begin transaction failed的解决方法

    异常: javax.servlet.ServletException: org.springframework.transaction.CannotCreateTransactionException ...

  6. 简述 Hibernate 和 JDBC 的区别、优缺点

    1.hibernate是一个开源的.采用面向对象的思想实现ORM映射框架,它对jdbc进行了一层封装,对于数据库的连接.关闭.数据的持久化(增删改查).事务的管理都进行了封装,使得程序开发的时候可以用 ...

  7. Hibernate与JDBC、EJB、JDO的比较

    常用的数据库操作包括:JDBC.EJB.JDO以及Hibernate.它的各有优缺点: (1) JDBC:多数Java开发人员是用JDBC来和数据库进行通信,它可以通过DAO模式进行改善和提高.但这种 ...

  8. 在Spring中采用声明式方法对Hibernate和JDBC进行统一的事务配置(AOP)

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  9. 【Hibernate】JDBC操作与hibernate的区别

    JDBC: 1).表--JavaBean--操作(间接操作数据库) JavaBean属性名对应数据库字段名,操作JavaBean中属性名达到操作数据库表的效果: 2).表---------操作(直接操 ...

最新文章

  1. 网站文章不收录怎么办!
  2. D3.js学习(四)
  3. Java判断一组数字是否是等差数列
  4. 天下会 - 搜索实战系列之视频
  5. linux磁盘永久挂载教程,linux 永久磁盘挂载
  6. 北京 | Aibee 爱笔智能 招聘 计算机视觉算法实习生
  7. Horizo​​ntal Pod Autoscaler (HPA) 根据资源横向扩展
  8. 二十二、软件安装RPM、SRPM与YUM
  9. C++%f和%lf的区别
  10. Audio播放流程(五)---NuPlayer的Start流程
  11. 《Cocos2D-x权威指南》——第3章 Cocos2D-x中的核心类
  12. python 中获取数据etree.HTML打印问题
  13. Xshell6及Xftp6的使用
  14. c语言用分治法求最大最小值,C语言实现分治法实例
  15. Mysql数据库日期查询
  16. html网页图片下方空隙太大,div+css排版图片IMG下边界有空隙
  17. 键盘定位板图纸_看看199的机械键盘可以有多酷
  18. 数据约束 for:麻包缝裤衩
  19. 哈罗单车获10亿元D2轮融资 共享单车仍有精彩可期待
  20. 解决java.io.IOException: Cannot run program cygpath: CreateProcess error=2, 系统找不到指定的文件 的错误...

热门文章

  1. linux 用户行为审计update1
  2. win 下 安装 iphone 环境
  3. linux内核第一个函数,通过内核源码看函数调用之前世今生 - 极光 - CSDN博客
  4. android 2.0 软件,Apeaksoft Android Toolkit
  5. 3.6.3 无线局域网
  6. 关于信噪比的确切含义——Eb/No和SNR的区别
  7. 赛灵思FPGA中的主要时钟资源介绍
  8. 从源码分析DEARGUI之菜单
  9. vue实现点击后多级标题联动变化
  10. iPhoneX快速适配,简单到你想哭。