在去年12月份的时候,开始接触Hibernate,但是随着掌握的深入,反而出现了几个疑问,希望大家可以讨论一下。更希望有专家可以给出一个明确的解答。
1,Hibernate框架在一个项目设计时期的地位。对于一个项目来讲,dao设计的一个原则就是可以比较方便的替换orm的具体实现。比如我可以替换Hibernate为ibatis而不需要改变我的业务代码。
这是不是说只是在dao的实现阶段,才会考虑到Hibernate?
2,在我学过的所有框架中,Hibernate是比较难以掌握的一个。而且从论坛上提问的情况可以看出来,很多人对Hibernate的理解差不多跟我同样的水平。针对一个项目而言,如果项目组内没有Hibernate专家,还是不要使用Hibernate的为好,而成为Hibernate方面的专家是一件非常困难的事情。是不是很多人在为了使用Hibernate而使用Hibernate?而不是针对项目组的实际情况呢?
3,在ibatis的官方手册上说,Hibernate要求我们的程序对象设计的足够好,这样才能发挥Hibernate的特性。这是不是意味着如果我们的对象设计的不好的话,就不应该使用Hibernate。Hibernate会不会对加大编程的难度,而不是降低难度?
4,Hibernate中一些特性的设计,比如懒加载,比如对一对一,一对多,多对多映射的支持,对继承的支持,二级缓存,一级缓存的支持,是我们选择Hibernate的主要理由吗?
5,我曾经在没有使用过ibatis的时候,仅仅通过看同事的代码就能使用ibatis,而且使用起来得心应手。但是我现在专门学习Hibernate超过五十个小时,我觉得我还是不能熟练的掌握Hibernate,这是为什么?(如果Hibernate这么复杂,我们可以因为他复杂而不去使用他吗?Hibernate有什么理由去说服我们为了学习他而花那么多时间?)
6,我看不懂Hibernate的官方手册,中文版和英文版我都看不懂。但是我能看懂ibatis的官方手册,即使英文版我都能看懂,这是为什么?(此问题不必解答,呵呵)

解决方案 »

  1.   

    1.为了减少拼sql的工作,这点ibatis也可以解决。
    2.可以实现二级缓存,这点ibatis里的cache不知道能做到多少,介于两种框架对数据库的要求和建模方式,cache的效果应该是hibernate强于ibatis。
    3.hibernate可以跨主流数据库,这点是ibatis比不了的。hibernate比ibatis复杂很多,数据库建模要保持多外键,少冗余才能保证对大限度利用缓存。虽然你设计成少外键多冗余的方式hibernate也能实现,但是总觉得不利于缓存。因为hibernate的复杂,如果项目里没有一个特别了解的人,项目一定会在关键问题上堵死,所以一定要小心选用。不懂的话,不要冒险,为了项目着想。
      

  2.   

    1:dao一般式屏蔽底层数据库的差异吧
    2:hibernate 不熟悉的话,建议还是不要用。如果实在想试试身手,对于一些表的关系不是很复杂的项目可以考虑下。个人比较倾向spring JdbcTemplate
    4:用hibernate主要可以让我们少写好多代码
      

  3.   

    我一直都在用hirbernate不是我觉得它好用
    而是因为他可以节省时间我做的项目都是在经理的催命似的赶出来的
      

  4.   

    如果不用hibernate 那么daoImpl 层的那么sql 语句够你写的..而且进行对象数据封装时的那些 setPro(); 写起都烦..至于你说难.我觉得不是很难(至少不到看不懂的地步).可能是你主观对他有意见,所以学起来不是那么情愿.效果自然不怎么好.hibernate 框架虽然不是java里面的标准但事实上以经成了标准备了.用的人多.而且效果也不错..
      

  5.   

    看情况,hibernate+spring可以减少很多代码量,避免琐碎无意义的字段重复。Hibernate用好不容易,但是可以挑选一些最重要的特性使用。ibatis个人不太喜欢,不喜欢它的风格,想替你省点事情,又没省掉多少。
      

  6.   

    hibernate我觉得它的映射很好有,其它的还没咋用过
      

  7.   

    为何要Hiberante呢?
    1 开发快,公司看重,码奴标配。
    2 可以基于领域驱动,不需要去过分关注烦人的数据库。
    3 优化得当,性能不同凡响。(不得当也是不同凡响)缺点:
    1 学习曲线高(回头看看还真不低)
    2 无法优化的项目性能远不如jdbc
      

  8.   

    我把hibernate当jdbc用,主要用原生sql!至于实体映射,因为性能问题没用。
      

  9.   

    5,我曾经在没有使用过ibatis的时候,仅仅通过看同事的代码就能使用ibatis,而且使用起来得心应手。但是我现在专门学习Hibernate超过五十个小时,我觉得我还是不能熟练的掌握Hibernate,这是为什么?(如果Hibernate这么复杂,我们可以因为他复杂而不去使用他吗?Hibernate有什么理由去说服我们为了学习他而花那么多时间?)专门学习五十个小时,就能熟练的掌握hibernate,那不会的人都去学了
      

  10.   

    我们公司准备做个新框架就是vs2008+jqery+castle+nhibernate+oracle9i,搞这么多东西在一起目的还是为了降低代码开发量和维护成本。学习成本是高,为了在castle和spring.net中选择一个就已经看了一个月还没确定下来,不过学习成本高成就也大,楼主花得每一分汗水和时间都是值得的。
      

  11.   

    使用hibernate就是因为能让我们项目的持久层这一层更oo一点,基于对象来操作数据库更快捷,至于如何使用hibernate,以及如何提高hibernate的效率的确不是一件容易的事,这要我们在项目中逐渐积累,至于学习资料,之人觉得hibernate in action 的确是一本学习hibernate不错的书籍!
      

  12.   

       每种框架技术都有他的弊端,看自己的习惯了,我看了下ibatis,配置比较简单,但我个人更倾向于Hibernate。
      

  13.   

    看情况,运用HibernateO/R Mapping技术对象与关系数据库映射,将对数据库的操作转换为对对象的操作,实现表与表之间一对一、一对多、多对多的关联,减少开发人员查询与处理数据的时间  以及程序的编写和维护的难度...
      

  14.   

    .net 是做web的
    java 也可以做web
    并且.net号称做web最快的、易掌握等等
    可是还是有人用java做web
      

  15.   

    多对1
    1对多
    1对1
    多对多
    这些关系部是Hibernian才有的 这都是关系型数据库常用到的东西 Hibernian可以用对象把这些关系描述出来.
    觉得不好用 没有用是因为没有掌握.如果总是拿一些站不住的理由当借口不去使用它 你永远都不可能会用.over
      

  16.   

    hibernate可以让我们忘掉 sql语句,呵呵
      

  17.   

    看了下ibatis,老实说,没发现他和原始的jdbc差多少。
    感觉写sql方面还差不多/不过hibiernate一旦掌握了,开发速度会提高很多,写的代码也少了很多。
    当然遇到一些比较麻烦的,估计会有些难度。最近拿hibernate对应一个很烂的数据库,发现hibernate的优点都没发挥出来,完全是杀鸡用牛刀。
      

  18.   

    hibernate用起来还挺方便,只是对里面的关系比较挠头,一对多数量大的时候,无法提取部分记录分页显示,或者是我不会,哪位知道请说说
      

  19.   

    1的实现必须面向接口编程,也就是为每个dao定义接口,再DI。业务代码访问持久层全部依据接口引用。如果要替换持久层则只要增加ibatis的dao实现然后改一下配置,此即开闭原则中的对增加开放。
    ibatis与hib的使用场景区别在于如果o和r的阻抗过大,hib就不在适用,比如在遗留数据库上大量的进行多表联合查询、复杂sql,此时ibatis胜于hib。ibatis是sql map、hib是or map,二者没有可比性。
      

  20.   

    最近也在看hibernate头都大了,还是ibatis比较容易上手
      

  21.   

    hibernate封装了数据库语句,代码量显然少了,在不同的数据库间切换也比较容易,这些应该是优点吧
    但若出现问题不好解决,表间的关系设置不对也会产生问题,正式项目中若对此不是很熟的话,少用为好.
      

  22.   


      为什么用hibernate呢,因为人家在用,所以就用,中国人都喜欢这样!
      

  23.   

    我认为sh开发是Java开发最快的了
      

  24.   

    但是覺得﹐﹐要用hibernate的前提是,數據庫必須設計的要好﹐﹐否則會很頭疼哦﹗﹗
      

  25.   

     #52楼 得分:0回复于:2009-05-29 09:51:05引用 51 楼 lixianzhang0493 的回复:  为什么用hibernate呢,因为人家在用,所以就用,中国人都喜欢这样! 
    这个也是一个很大的理由 
     这个理由太强大了
      

  26.   

    使用ide 生成代码 ,开发速度快.
    使用关系映射,一队一  多对一   使对象方便管理
    但是运行起来速度慢!
      

  27.   

    在上个项目中也用Hibernate, 可郁闷的是根本没有Hibernate的关系映射。 一个表一个xml。 表与表之间的关系,在业务层里自己搞。 真不知道这样用算不算是用了。  当别人问起Hibernate的性能优化,都觉得很惊讶。 不知道做这样的项目有什么意思。只想完成任务。一点技术含量都没有。
      

  28.   

    biernate 我最头痛就是配制关系了
      

  29.   

    本人感觉不出hibernate有什么好用的,可能学的不通彻,经验少,不会运用吧 
      

  30.   

    Hibernate 的确很好,但是每次追源码的时候都特麻烦,我感觉好东西都这么复杂!!呵呵
      

  31.   

    hibernate 好处是映射  缓存 还有就是 使程序员不用在敲sql语句了(一般情况)
                坏处是在持久化数据时  降低了性能。(这是我发现的最差劲的缺点,但也是它最大优点的必要因素。)
     不过总体上来说 hibernate 为程序员节省出来的时间 足以弥补这个缺点了,就看具体项目是不是能充分发挥他的优点。 
      我学了hibernate 就感觉 他让数据库也开始面向对象了。
      

  32.   

    学了好多框架 觉得Hibernate是最难的一个
    优化永远都学不好!
      

  33.   

    hibernate 容易学习,但要用好不容易
      

  34.   

    当你的项目比较大,且数据库表成网状时,你就知道hibernate的好了;
    如果你的SQL非常好的话,可以考虑自己去理清多表之间的联系,但估计将相应的SQL语句写出来也够呛!
      

  35.   

    我觉得spring更难理解```````````
      

  36.   


    我用hibernate直接就上手了,也没有发现什么不对劲儿的地方,可能是我还没有使用过ibatis吧!
      

  37.   

    个人观点,共同探讨1.没有看懂
    2.同意,我感觉很多人是为了用hibernate而hibernate。
      这个东西太难掌握了,我自己做了一个基于jdbc的数据访问框架,就很好用。
    3.应该是的,hibernate更像是操作对象,而不是关系型数据库。
    4.说到选择hibernate的理由,宏观的谈不上,微观的可以说说我为什么选hibernate
      我第一次选择hibernate是因为初学java,啥也不懂,所以可以总结为,为了hibernate而hibernate
      第二次,我放弃了hiberate,而使用自己开发的数据访问框架
    5.没用过ibatis,Java的框架太多。但Hibernate确实难以上手。
    6.可能每个框架开发出来的目的不一样,有些是为了后期维护简单,可以总结为,“为了管理”,Hibernate有很多思想你我都搞不懂,可能都是为了管理吧。  而有些框架的出现,是为了方便程序员开发,可以总结为“为了开发效率”,做为一个具体写代码的开发人员的我和你,应该更喜欢这种为程序员考虑的框架。
    说得过了点就是,Hibernate简单就是折磨人用的,一个数据访问这么简单的事情,要搞得那么复杂么?
      

  38.   

    没学过ibatis,一直在用hibernate  有空也把它学了,对比一下它们的优缺点!
    人个觉得:用哪个主要还是看具体项目情况!具体问题具体分析!
      

  39.   

    因为大家都在用SSH框架,客户一听SSH框架不错,就要求公司使用SSH框架开发他的项目。
    很多时候,我们都是因为主流而被主流。
    前段时间就面试过一家公司,他们公司只用 strtus 和 spring ,可是面试的时候面试官一个劲的狂问hibernate 方面的问题。
      

  40.   

    搞这么复杂!个人觉得能work就行,用Hibernate能提高大型项目的开发效率,能节省成本的东西当然用的人多。小项目就别用了,总共就几个页面几个bean还用hibernate,个人觉得反而更麻烦。
      

  41.   

    Hibernate确实能加快开发时间,但是一旦表关系太复杂,就会遇到麻烦!
      

  42.   

    经典,我认为是用hibernate的主要原因还是跨数据库,至于缓存可以提高效率倒不是主要的,因为其他方案也可以实现。学习hibernate确实比较麻烦,不过官方手册很明白,至于楼主说的看不明白那就是你的问题了。一般学习一种框架,我们都是先看网上例子,在去官网下jar包,看demo。然后看手册,在然后就看源码。按照这种方法一般是学习最快的。程序员就是学习的命,认命吧