Hibernate优缺点

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库

Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序实用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。

大多数开发机构经常采取创建各自独立的数据持久层。一旦底层的数据结构发生改变,那么修改应用的其余部分使之适应这种改变的代价将是十分巨大的。Hibernate适时的填补了这一空白,它为Java应用提供了一个易用的、高效率的对象关系映射框架。hibernate是个轻量级的持久性框架,功能却非常丰富。

优点:

a.Hibernate 使用 Java 反射机制 而不是字节码增强程序来实现透明性。

b.Hibernate 的性能非常好,,因为它是个轻量级框架。 映射的灵活性很出色。

c. 它支持各种关系数据库,从一对一到多对多的各种复杂关系。

缺点:它限制您所使用的对象模型。(例如,一个持久性类不能映射到多个表)其独有的界面和可怜的市场份额也让人不安,尽管如此,Hibernate 还是以其强大的发展动力减轻了这些风险。其他的开源持久性框架也有一些,不过都没有 Hibernate 这样有市场冲击力。

上面回贴情绪有点激动,希望谅解,我不是因为有人批评Hibernate而感到不快,而是因为帖子里面的观点实在让我觉得荒谬。不管觉得Hibernate好也吧,不好也吧,我唯一觉得遗憾的是,在中文论坛里面找不到一个对Hibernate的真正高水平的评价。在TSS上有一个关于Hibernate的hot thread,跟了几百贴,其中包括Hibernate作者Gavin和LiDO JDO的CTO,对于JDO和Hibernate有过一些激烈的争论,我曾经耐心的看了一遍,仍然没有发现针对Hibernate真正有力的攻击,那些所谓的攻击无非针对Hibernate没有一个GUI的配置工具,没有商业公司支持,没有标准化等等这些站不住脚的理由。

补充几点我的意见:

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

linux

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/1938597.html

(0)
上一篇 2025年2月22日 23:46:33
下一篇 2025年2月22日 23:46:48

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • navicat premium怎么上传数据库

    首先,在Navicat Premium中连接要导出数据库的mysql数据库。 填写好连接数据库的信息后就可以连接到需要导出的数据库了。 打开要导出的数据库。 将数据库的结构和数据导出为SQL文件。 相关推荐:《Navicat for mys…

    2025年2月23日 数据库
    100
  • navicat怎么打开数据库

    1、打开Navicat,点击左上角的‘Conection’按钮。 2、点击后,弹出菜单,我们要选择是哪种类型的数据库,根据你本地部署的数据库类型来选就行了,我这里选择MySql。 3、选择后,弹出窗口,在这个窗口上我们先输入数据库的Host…

    2025年2月23日 数据库
    100
  • navicat怎么清除数据库备份

    第一步,打开Navicat。 第二步,打开mysql数据库连接。 相关推荐:《Navicat for mysql使用图文教程》 第三步,点击备份所在的数据库,并选中备份菜单,此时显示已建的备份。 第四步,右击要删除的备份,在弹出菜单中选择“…

    2025年2月23日 数据库
    100
  • navicat怎么备份数据库

    本篇经验将和大家介绍如何利用Navicat for MySQL进行数据库备份的操作,希望对大家的工作和学习有所帮助! 推荐教程:mysql入门视频教程 1、打开桌面上的或者从开始程序中找到Navicat for MySQL,如下图所示: 2…

    2025年2月23日 数据库
    100
  • navicat新建数据库的步骤

    打开navicat工具,连接上您自己的mysql服务器,然后在如图所示的连接上右击,选择新建数据库。 相关推荐:《Navicat for mysql使用图文教程》 在新建数据库对话框中,需要输入数据库名称,选择字符集和排序规则,名称建议使用…

    2025年2月23日 数据库
    100
  • navicat怎么导入本地数据库

    navicat怎么导入本地数据库,为什么我没有找到该导入的功能呢?请看下面方法。 推荐教程:MySQL入门视频教程 1、首先我们打开软件,并且连接上本地数据库,选中连接,右键打开连接,直接双击也可以的 2、在本地数据库中我们新建一个数据库用…

    2025年2月23日 数据库
    100
  • navicat如何设置高级数据库属性

    Navicat是一套快速、可靠的数据库管理工具,在设置高级连接选项卡中还可以设置高级数据库属性,是否设置高级数据库属性不做强制性要求。如果需要设置高级数据库,前提是勾选“使用高级连接”。详细介绍如下: MySQL、PostgreSQL和Ma…

    2025年2月23日
    100
  • 怎么使用navicat连接数据库

      无论是本机安装的MySQL,还是远程服务器上的MySQL,对其进行管理都特别的麻烦,如何对其进行方便简单的管理呢?Navicat是一款管理MySQL数据库的软件,其简洁明了的界面,使我们能更好的管理数据库,对其进行增删改查的操作。 推荐…

    2025年2月23日 数据库
    100
  • navicat怎么创建数据库

      使用navicat快速创建数据库,我们这以创建Mysql数据库为例,其他数据库在navicat中操作都一样 推荐教程:MySQL数据库入门视频教程 1、打开navicat 2、选中数据库连接“root”右键-》新建数据库 3、填写数据库…

    2025年2月23日 数据库
    100
  • 如何使用navicat为数据库表建立索引?

    下面介绍如何使用Navicat为数据库表建立索引的具体操作方法。 推荐教程:MySQL数据库入门视频教程 1、打开Navicat 2、打开数据表所在的数据库,右击需要新增索引的数据库表,然后点击【设计表】 3、此时进入表设计界面 4、点击【…

    2025年2月23日 数据库
    100

发表回复

登录后才能评论