个人愚见:
既然hibernate封装了JDBC,也就是说,JDBC的功能hibernate都有,JDBC没有的功能hibernate也有。
那为什么有人还是用JDBC呢?请说说JDBC和Hibernate的好处。多谢各位。

解决方案 »

  1.   

    hibernate有时太麻烦,比如简单查询一下,我还要配置N个文件
             有时没优化
      

  2.   

    一下是个人愚见:
    1.hibernate封装的比较XX,但是也有弱点,比如没有ibatis之类的灵活。
    2.再者,对于一些小型项目,用hibernate有点牛刀杀鸡。
    3.对于数据库这方面的知识不熟悉的人来说,用hibernate固然方便,但是一些基础的代码都会更加生疏,不利于新手学习。
    4.hibernate对于我们来说只是一个工具,它的诞生更多的是为了简化开发,所以要分时分地去用。
      

  3.   

    增、删、改  hibernate都没什么问题。。
    搞个10几张表相连的数据  你用hibernate查。。 那性能可能想而知。。
      

  4.   

    当初Hibernate之父开发出它的时候就希望能在项目中不写SQL语句 这也是他的一个优点 当然不只是这一个啦Hibernate内部封装了JDBC!用起来比较方便 不用去写sql语句 
    当然 问为什么有人要用jdbc 这是必须的 java要访问数据库就要使用JDBC (没有使用框架) LS的也说了 用框架得看项目的大小  开销等种种问题...
      

  5.   

    [size=40px]hibernate 比之 JDBC,除了项目大小之外的限制以外,还有别的不足之处吗?[/size]
      

  6.   

    实在不想评价,这点认识,你觉得JDBC不用你就不用么,何必到论坛上咋呼。
    你能够从数学意义上论证 “JDBC的功能hibernate都有,JDBC没有的功能hibernate也有”,如果这样,hibernate为什么还保留的接口,给原生的SQL调用提供支持?
    还有,hibernate本身的应用,很可能会形成系统的性能降低,能有功能不算什么,能完成高并发相应才是王道。当然hibernate本身也提供了缓存机制,这没啥问题。
      

  7.   

    1.JDBC操作繁琐2.sql语句并不是面向对象的3.可以在对象和数据表建立关联简化编程4.可以跨数据库平台
      

  8.   

    JDBC是Java提供的一个标准接口,任何支持java存取数据库的技术都要实现jdbc。
      

  9.   

    1.对性能要求高的项目来说,自己编写SQL语句比hibernate更好
    2.hibernate适合开发人员,但对于测试人员,本来只需要一条简单的SQL语句,如今却要配置映射文件,如果某个表的字段非常多的话,这是一件痛苦的事情。
      

  10.   

    你说话还真奇怪。。你都说了hibernate是封装了JDBC。。那你用hibernate还不是在用JDBC。。难道你把自己武装一下,你就是不是你了?没了JDBC。。hibernate你还能用?
      

  11.   


    哥,我说的是直接使用JDBC,不是通过hibernate间接使用
      

  12.   

    [size=50px]没有一个真正学懂了hibernate的人,真悲凉..连个JDBC与hibernate的性能分析都说不出来[/size]
      

  13.   

    [size=100px]回过本帖的筒子们都好好回去学习hibernate吧[/size]
      

  14.   

    hibernate  不就包装了一下JDBC嘛    基础的技术最重要哈
      

  15.   

        首先你这个问题说法就不对,Hibernate强悍就不要JDBC这句话是存在问题的,因为Hibernate就是对JDBC进行的封装。
         JDBC的全城叫做Java Data Base Connectivity(java数据库连接),是一组由Sun公司提供的Java操作数据库的API,然后由各个数据库厂商进行了实现,这样我们就能通过相应的驱动包进行各种数据库的连接操作。Hibernate就是基于JDBC的这个一个持久层框架。那么为何要有Hibernate呢?Hibernate又为何而来呢?这要从我们本身Java这门语言说起,Java语言从出生开始就被定位为一种面向对象的语言,Java视一切皆对象,而我们目前大多数的数据库为关系型数据库,数据是通过表与表之间的关系进行联系,当我们使用JDBC操作关系型数据库的时候我们不得不去考虑关系型问题,这样就违背了我们Java这门语言的面向对象观点,于是Hibernate出现了,Hibernate就是为了隔绝对象和关系型数据库之间的这一层别扭(姑且这么叫吧),这样,我们站在Hibernate的角度我们只需要考虑对象的操作,比如说保存一个对象只需要调用session的save方法,而不需要写一条insert into的SQL语句去操作关系型的表,从而达到OO的思想。这样我们就纯面向对象了,那些非面向对象的事情都交由Hibernate去做了,Hibernate会帮我们生成一条insert into语句去发送给数据库。
        既然Hibernate如此的好,那么当Hibernate出现后我们还需要JDBC吗?上面我讲了,不是我们不要JDBC了,而是Hibernate帮我们去操作了JDBC,既然Hibernate在操作JDBC我们在操作Hibernate,这样Hibernate就充当了一个中间人的角色,我们想要什么东西须得交给Hibernate,然后再由Hibernate交给JDBC,这样就会多一层去操作,对性能会有一定的影响,如果你的程序对性能要求非常高,那么自己操作JDBC自然要比Hibernate速度更快、效率更高。
        在批量处理问题上,Hibernate并没有提供较完美的实现,比如说你要修改1万个对象的某一个属性,通过Hibernate操作你得先加载这1万个对象,然后修改这1万个对象的属性,然后再保存这一万个对象,而JDBC我们可以update xxx set x = x where x = x就可以实现。
        看完我的回复之后你觉得“Hibernate如此强大,还需要JDBC么?”这还是一个问题么?
        
      

  16.   

    1 hibernate 和 jdbc  优缺点  
            hibernate好处:面向对象的操作数据 ORM 
                     坏处:1 系统运行效率差
                          2 缓存
            适合做在线事务处理
            不适合做在线事务分析 存储过程 BI    
      

  17.   

    对于性能来说,jdbc比hibernate好 。还有就是如果表的字段太多,使用hibernate配置时就会十分的痛苦和麻烦。还有我感觉sql语句应该比hql语句更明了些吧。对于复杂的查询,我还是建议使用sql语句的。
      

  18.   

    我真不想说你,你估计连jdbc是什么都没搞清楚,我本来想继续和你探究j和h的区别,但看到你的态度,我只想说一句,这里回答问题的任何一个人都比你强,能力的大小决定你所接项目的大小,端正态度才能走的更远!
      

  19.   

    我真不想说你,你估计连jdbc是什么都没搞清楚,我本来想继续和你探究j和h的区别,但看到你的态度,我只想说一句,这里回答问题的任何一个人都比你强,能力的大小决定你所接项目的大小,端正态度才能走的更远!
      

  20.   

    hibernate就是数据库表转换为对象 ,在就是对象转换为数据库表的过程 ,其实在你写jdbc的时候就已经这样了,只不过hibernate给你做了封装,事情变的就简单了,
    但是hibernate在优化性能等方面,运行效率方面会比较差,怎么它也要讲你的hql转换为sql才能执行的,况且一些复杂的sql,hibernate是不支持 ,这时候只能老老实实的写sql语句了
      

  21.   

    hibernate只能干逻辑相对简单的任务,也是比较常见的任务
    麻烦一点点的任务在性能上和SQL就是两回事了
      

  22.   


    基本的增删改查关联操作Hibernate是可以胜任的。但是还是有一些操作,Hibernate做的不是不可以,而是实在效率不高。比如做报表,多表联合查询等等。(当然,很可能不是Hibernate做的不好,而是使用Hibernate的人做的不够好,呵呵)应该说Hibernate有它自己的优势,在配置定义好的情况下,如果项目相对简单,业务操作不复杂,规模不大。这时使用Hibernate确实不错。复杂数据操作,高并发集群方面,Hibernate确实支持的不好。
      

  23.   


    更改LZ一句话。既然hibernate封装了JDBC,也就是说,JDBC的功能hibernate都有,JDBC没有的功能hibernate也有。hibernate有的JDBC都有,hibernate能做的,JDBC都能办到。hiberate没有的不能做的,JDBC也有
    好了,就说这么多
      

  24.   

    算了,看楼主这么激动。jdbc = java data base connection( 数据库驱动 ),以及JCA都是属于数据连接和访问的通用接口。
    在此基础之上,数据库访问层往往会遇到如下场景。
    1.用户程序需要支持数据主键生成,不然系统升级或迁移的代价很大。
    2.DAO访问层提供给业务层的"数据对象"和数据库中"表对象"往往不是一一对应的。人为解决数据映射。
    3.增加DAO会话(Session,该会话也可以延长至业务会话),提升了connection(由ConnPool提供Con)利用率,Session的生命周期不等于Conn。
    4.Java语言一大特性:封装。对应用开发者屏蔽Conn的API,提供给用户更人性的会话式API。(不要说JDBC更简单,那是应该你熟悉它或者应该说你不熟悉它)。
    5.锁机制实现。乐观,悲观。6.缓存 | 内存数据库策略优势。
                    面对大量的数据插入                      缓存后批量更新,效率提升。
                    面对大批量数据查询                      缓存热点数据,减少DB访问量。
                    面对大量数据更新(特别是紧耦合对象更新)  级联加载,缓存更新,减少DB访问频率。
      内存数据库在面对数据更新插入时,能保证事物,(XTP)极限事物处理的必备良药。  一级缓存就不多说了,咱来说说二级缓存。二级缓存在很多应用中都是被独立出来的。
      而二级缓存是可以使用内存缓存或者内存数据库来替代Hibernate默认的ehcache实现。
      Hibernate提供了二级缓存的接口。以上场景,Hibernate都提供了实现方案,你看下你的应用有哪些符合以上场景不就好了。
    JDBC可和Hibernate没啥冲突,他们解决的问题截然不同的。
      

  25.   

    强调JDBC比Hibernate的效率要高,性能要好,这个是没有好好理解Hibernate。
    或者换句话说,你不需要Hibernate解决的问题场景,再个就是你觉得你能做的比它好。刚才学习Hibernate的时候容易有这个误区,淡定,放松,仔细慢慢的体会,一切切会不一样。
      

  26.   

    楼上的面向对象,在问题场景中是不需要提及的。
    对方说的是解决得问题场景。 ORM在数据映射上,本来就是基于面向对象的概念进行映射处理。这个重视程度可能因为角度不同,呵呵,这个我就不累述了。楼主对以上的回答还有什么不满意的啊?尽管提出来,马上放假,哇哈哈! 心情特好。有问必答
      

  27.   

    lz可以参考hibernate与ibatis的区别,用jdbc效率方面要高
      

  28.   

    来CSDN三年,我见过最牛的提问者
      

  29.   

    效率问题。。hibernate效率没有jdbc好。
    还有就是jdbc轻量级
      

  30.   


    还好意思说别人?垃圾一个。你这个问题我可以给你翻译一下:你好比在问,你比你爹,你妈优秀多了。那还要你爹你妈干吗?
    没你爹,你妈。哪儿来的你?
    不知道hibernate是封装的JDBC?不知道你是你爹妈生的?
      

  31.   

    hibernate麻烦,本来搞个项目,得考虑什么db性能、io、并发什么,这下好了,还得考虑hibernate怎么用,有时候出了bug,我不知道是因为hibernate性能问题,还是我代码的问题;另外,hibernate 做db优化十分不爽。
      

  32.   

    hibernate只能用在不考虑性能、表结构不复杂的中小型项目中,
      

  33.   

    有了Hibernate。。还要电脑干嘛?。。楼主,我说的对吧
      

  34.   

    赞一个 22楼的回答倒是漏了看,的确不错。呵呵!从技术背景出发来谈。nice。最后一个问题场景 Hibernate的确比较疲软。但这种场景即使存在,
    如果发生频率一旦提高,形成一定热点,hibernate的二级缓存还是能提速的。如果不能形成热点,的确只能从native sql去解决这个问题了。而且各个数据库厂商也会提出一些私有API,如果真从极限效率上去考虑,估计hibernate就更疲软了。因场景而异,各人取其所需。
      

  35.   

    有没有什么情况下只能用JDBC,不能用hibernate???
      

  36.   

    LZ,你低调一点,问问题要虚心,简单来说,
    考虑到开发项目的进度,用Hibernate可以加快工作效率,繁琐的jdbc的语句你就可以不用去考虑的
    但是如果是做批量操作,必须使用JDBC,即对性能要求较高的操作,请用JDBC