O/R 除了那些宣传的不用写JDBC代码,减少代码量,增加Cache等等普通功能的增强之外,最吸引人的地方在于: 1、动态构造SQL  2、真正以对象的方式来操纵数据库存储。 3、复合持久对象的延迟加载技术(Lazy initialization) 

解决方案 »

  1.   

    1、动态构造SQL  
    写SQL更直观些2、真正以对象的方式来操纵数据库存储
    不用对象就不好吗?面象对象是最好的程序设计方法吗?3、复合持久对象的延迟加载技术(Lazy initialization) 
    直接使用SQL会比这个慢吗?
      

  2.   

    1.项目中会经常遇到参数不确定的情况,必须动态构造SQL2.的确,面向对象不一定的最好的设计方法,但最好的设计方法必定的面向对象的3.直接用sql:如果想要得到n个复合持久对象,就必须对每个对象的集合属性再查询一次外键关联表,因此总共需要n+1次SQL查询,假设每个对象的集合属性包含m个关联对象。那么就需要在内存中分配(m+1)*n个对象。如果关联对象还是复合对象的话,同理,需要内存分配n+mn+mnk个对象。
    而用复合持久对象的延迟加载技术:就不会立刻从数据库中取出来的,只需要1次sql操作,取出m或n个对象;
      

  3.   

    动态构造SQL  
    我这两天才查的资料
    本来想用这玩艺写数据校验,结果没搞懂
    继续在看ing
      

  4.   

    1.项目中会经常遇到参数不确定的情况,必须动态构造SQL
    其实我感觉用Hibernate 可能比自己写SQL方便吧。看了很多论坛,对Hibernate 评价很好。
      

  5.   

    对数据库的操作跟对对像的操作你说哪个更好?其实他就是封装了数据库,每个字段映射成了一对GET,SET方法,就跟实体BEAN一样,HIBERNATE实现了JDO1.0,当得到一个对象的时候也就是得到了一条记录,对象数据库是未来的发展。
      

  6.   

    晕,CSDN怎么老是出这种贴子?
      

  7.   

    对sql性能要求高的,多表查询的 ibatis更方便点~
      

  8.   

    Hibernate 的好处在我看 一开始看来只是能夸数据库..后来才发现,他不但夸了数据库, 还能针对不同数据库做了查询优化..他强制我要有EntityBean, 有时候我想偷懒不写EntityBean都不行. 但这是个最基本的要求.如果只是用了Bean之后,我担心性能会下将..能不能做cache,或者lazyload之类的..发现Hibernate已经帮我考虑到了,连分野其次,我在学习Hibernate的时候顺带学习到了好多其他东西...比如 XDoclate,还顺带关注了其他开源...
      

  9.   

    Hibernate是一种ORM映射工具,它提供了从Java类到数据表的映射,数据查询和恢复等机制。
    相对于使用JDBC和SQL来手工操作数据库,使用Hibernate,可以大大减少操作数据库的工作量。等你用了之后,你就会爱上它的,呵呵。
      

  10.   

    1.项目中会经常遇到参数不确定的情况,必须动态构造SQL
    参数不确定,是不是指查询条件是否有不确定?只要简单的写一个类来生成查询条件不就行了?我不太清楚Hibernate用什么机制来确定参数,我想当传入一个JAVABEAN作为条件时,如果某字段是null,我怎么知道条件应该是不要该条件项还是 is null的条件2.的确,面向对象不一定的最好的设计方法,但最好的设计方法必定的面向对象的
    语句不通,且是假大空3.直接用sql:如果想要得到n个复合持久对象,就必须对每个对象的集合属性再查询一次外键关联表,因此总共需要n+1次SQL查询,假设每个对象的集合属性包含m个关联对象。那么就需要在内存中分配(m+1)*n个对象。如果关联对象还是复合对象的话,同理,需要内存分配n+mn+mnk个对象。
    而用复合持久对象的延迟加载技术:就不会立刻从数据库中取出来的,只需要1次sql操作,取出m或n个对象;
    我分步执行不同的SQL,进行子查询就行了,也可以选择用一句SQL返回,相当灵活,何必如此麻烦4.对数据库的操作跟对对像的操作你说哪个更好?
    如果设计时有数据库的概念,我认为还不如直接操作数据库,概念更直接,考虑时不用转义了,除非有人帮我设计好数据库和javabean,我只跟对象打交道,那当然也不错。不过这样就真的一点不需要知道数据库的结构了吗?5.ibatis 也不错~
    6.对sql性能要求高的,多表查询的 ibatis更方便点~
    再快也要先写映射文件,我直接写句SQL不是更快,性能更高7.Hibernate 的好处在我看 一开始看来只是能夸数据库..
    后来才发现,他不但夸了数据库, 还能针对不同数据库做了查询优化..
    他强制我要有EntityBean, 有时候我想偷懒不写EntityBean都不行. 但这是个最基本的要求.
    如果只是用了Bean之后,我担心性能会下将..能不能做cache,或者lazyload之类的..发现Hibernate已经帮我考虑到了,连分野
    其次,我在学习Hibernate的时候顺带学习到了好多其他东西...比如 XDoclate,还顺带关注了其他开源...技术无止境,为了学习新东西就说Hibernate好,有失偏颇8.
    Hibernate是一种ORM映射工具,它提供了从Java类到数据表的映射,数据查询和恢复等机制。
    相对于使用JDBC和SQL来手工操作数据库,使用Hibernate,可以大大减少操作数据库的工作量。等你用了之后,你就会爱上它的,呵呵。效率很高吗?我写了一个类只有一种方法execute,返回是自定义的RecordSet类,可以做任何的SQL查询(分页+动态数据绑定),加上一个拼SQL条件的类Conditions,执行SQL没有问题,如果再写一个根据库表结构生成增删改查询方法的实体类,有什么不好?
      

  11.   

    还用说么,只能说HB是目前比较好的解决方案.但是:
    HB是幼稚的技术.
      

  12.   

    Hibernate根本就是垃圾,我没发现他会带来什么好处,倒是带来不少麻烦。
    没人会用他的API,都是从例子中拷贝,我无法对程序进行优化(听说它已经优化好了)。
    Hibernate本身就增加了开发的复杂性,同时增加了许多不确定因素(因为用它的人都
    不知道Hibernate怎么用)
    跨数据库完全就是一句空话,谁没事整天换数据库呀!
      

  13.   

    使用hibernate会影响数据库设计和类设计。除非你从头开始做一个项目,并且你的队员全部都愿意用hibernate,否则得到的只能是蹩脚。跨数据库没有任何意义,而且会降低性能,同意楼上的。当然,当你在项目前期做好类图、数据库和映射后,剩下的就可以交给刚毕业的人去干了。这样可以实现分工,你在公司的地位就巩固了,前提是你是一个OO和UML的fans。
      

  14.   

    其实hibernate在OR里是很不错的,但是到底OR是否适合你?
      

  15.   

    你应该想想自己的能力真的达到设计师的水平吗?
    如果没有,建议不要使用Hibernate!
    不是每个人都可以用的好Hibernate的
      

  16.   

    喜欢写SQL的还是用jdbc吧,理论上总能实现的
      

  17.   

    7.Hibernate 的好处在我看 一开始看来只是能夸数据库..
    后来才发现,他不但夸了数据库, 还能针对不同数据库做了查询优化..
    他强制我要有EntityBean, 有时候我想偷懒不写EntityBean都不行. 但这是个最基本的要求.
    如果只是用了Bean之后,我担心性能会下将..能不能做cache,或者lazyload之类的..发现Hibernate已经帮我考虑到了,连分野
    其次,我在学习Hibernate的时候顺带学习到了好多其他东西...比如 XDoclate,还顺带关注了其他开源...>>>技术无止境,为了学习新东西就说Hibernate好,有失偏颇
    No,no 我的逻辑不是这样子的 ,Hibenate对我来讲根本不是什么新东西,,在他出现之前我就期望有这样的工具存在了。。只是Gavin King实现了。你不觉得以上几点都给你开发带来了方便么?  我只想说Hibernate很方便。 如果你用想用自己的代码来取代这些功能,那我只能佩服你的高超水平。
    好像大家对JDO的意义都不太了解...
    1。为什么要跨数据库?   你不可能让使用你产品的人,为了你开发的东西而单独买一套数据库吧.2。为什么要以 对象的方式来操纵 ? 如果你的操纵的不时对象, 1000个字段,你要set 到什么时候? 再update你要写道什么3。为什么用XML影射,,是为了Domain Object和数据库表作映射,是为了让程序执行的时候自动的指导是针对那张表操作。。你不觉得又要操作对象,又要察看那张表很麻烦么?  影射还有好多其他好处, 扩展方便。。如果这个你用程序来实现,,你不觉得编程之后还要编译么? 程序能像XML规定格式和规范么? 介于你以上的种种观点,我还是奉劝你好好学习一下Hibernate.
      

  18.   

    my opinion:
    java is dying, because there are toooooo.... many extensions, some are standardized, some not ,he is losting his simple feature.
      

  19.   

    To: bdsc()..
      no matter what's the result of java, i like java,   
      although some of these extensions are not standardized ,they also raise  many  many  interesting thought.. i enjoy it..
         
     
      

  20.   

    看看hibernate的源代码,然后再去评论它的是非吧!
      

  21.   

    如果hibernate的技术是在sql之前出现的,你用习惯了hibernate,突然要你用sql,你也会觉得hibernate更好用,更直观。所以说,是否好用,是否直观,是个人主观的印象。但技术是客观的。也许你会觉得hibernate还要配置这,配置那,很麻烦。但我觉得这没什么不好,通过这些配置,把MVC和面向对象的思想很灵活的运用到了对数据库的访问上。我很高兴的发现,除了JDBC,除了写sql语句,对数据库的操作,还可以这样做。我的数据库学的很不好,除了简单的select就写不出其它的什么了。
      

  22.   

    Hibernate目前不能直接调用存储过程,做大项目头疼啊!
      

  23.   

    我真切希望  那些说Hiberntae 是垃圾的人这辈子最要别用,省得烦躁了你写程序的心情.!!!
    howell008,你不是能通过SessionFactory 得到 connection么?
    这和你通过jdbc得到Connection有什么区别? 
      

  24.   

    等Hibernate3中~ 又能直接写sql了 不错
      

  25.   

    这种争论真的很无聊,楼主的反驳也看不出理由充分,反驳的成功。我喜欢用hibernate理由简单:
    1.它帮我处理事务,当然配合spring就更棒拉。不要说你写持久层的东西从来不考虑事务处理的。
    2.我仍然是对对象进行持久化,而不去理会数据库的存在。hibernate顾名思义冬眠,让数据库冬眠去吧。
    3.写jdbc的时候,每次都要重复那些try,catch,close那些连接。让人厌烦,容易出错,也产生很多不必要的重复代码。记住重复代码是万恶之源。
      

  26.   

    这里这么多hibernate高手,菜鸟请教一个问题:
    第一次运行hibernate出错,出错信息:
    net.sf.hibernate.MappingException: Dialect does not support identity key generation
    在hibernate的源码里面找到是下面这个方法,奇怪,这个方法好象只实现了一半一样:
    /**
     * The syntax that returns the identity value of the last insert, if
     * identity column key generation is supported.
     * @throws MappingException if no native key generation
     */
    public String getIdentitySelectString() throws MappingException {
    throw new MappingException("Dialect does not support identity key generation");
    }
    我的bean的xml文件写着:
    <id name="id" column="id" unsaved-value="null">
      <generator class="identity" /> 
      </id>--------------------------------------------------------------------
    请问是不是我下载的hibernate(hibernate-2.1)包太旧呀?请问怎么解决?连的是oracle9i数据库,谢谢
      

  27.   

    楼上的你的错误应该是数据库字段与XML文件不匹配造成的,
    <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 2.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
    <hibernate-mapping><class name="hibernate.Hello_Bean" table="test_hibernate" ><id name="id" column="id"><generator class="identity"/></id><property name="name" type="string" update="true" insert="true" column="name" />
    <property name="address" type="string" update="true" insert="true" column="address" /></class></hibernate-mapping> 稍微解释一下,<class name="hibernate.Hello_Bean" table="test_hibernate" >里的name指你的生成表的类,table则指定你要创建的数据库表的名字,可以自由修改,没有影响.<id name="id" column="id">设置主键ID,这里name的值id跟Hello_Bean.java里的方法getId与setId对应,不用管这个,hibernate会自动调用,配置好就可以了,column的值为要生成的字段名,可以自由修改,没有影响。<generator class="identity"/>属性让主键的ID自增(插入数据的时候自动加1)<property name="name" type="string" update="true" insert="true" column="name" />这里的name值"name"跟Hello_Bean.java里的getName方法对应,column为要生成的字段名
    <property name="address" type="string" update="true" insert="true" column="address" />分别添加一个字段name与address,注意这里的type属性类型为string,如果这里的类型与Hello_Bean.java里设置的类型不一样会出错。
      

  28.   

    谢谢 umbrella1984(我是初中学历,怎么?你生气?) 的解释,但我还没运行下面这句就报错的:
    new SchemaExport(cfg).create(true, true); 
    数据库还没有建表,所以,应该不是数据库字段与XML文件不匹配造成的吧?
      

  29.   

    如果你的目录结构没问题的话你把我上面贴的那个XML文件改成你的再试下
      

  30.   

    如果你要写N段SQL语句来做你的数据库更新,你能保证你的每个SQL都不会错吗?
    就我的经验,如果没有好的代码规范,和代码控制能力,
    SQL语句的调试是调试中花时间最多的东西,
    但是如果你改用这个Hibernate的话
    至少你只需要写HQL就够了,其它的Insert 和Update 就可以全免了,
    而且你也不需要为你的字段和对象对应关系花脑筋了
      

  31.   

    EJB3.0将加入许多类似Hibernate的特性,其实就是模仿的它,连例子都没两样,你要发誓不用EJB3.0就算了,不然请给点分
      

  32.   

    说hibernate是垃圾的人本身就是垃圾。连用都没用过的人没资格说三道四的。
      

  33.   

    最近在考虑一个系统的架构设计,也是在犹豫用不用hibernate。希望用过的人多谈谈心得,说说使用过程中的优缺点。不知道hibernate上手难不难呢,我们这边使用java经验是很少的。
      

  34.   

    我一直在用Hibernate,刚开始我一直就觉得它是个垃圾。
    不过我有一次测试发现Hibernate确实不简单,效率竟然和我自己用JDBC再封装差不多,大吃一惊。我现在很中肯的说:Hibernate并不是什么神奇的技术,也没有深奥的道理,不会JDBC和SQL的人最好
    不要用,用的好确实可以提高开发效率。如果只是copy代码的话,迟早会使你的系统崩溃。