O/R 除了那些宣传的不用写JDBC代码,减少代码量,增加Cache等等普通功能的增强之外,最吸引人的地方在于: 1、动态构造SQL 2、真正以对象的方式来操纵数据库存储。 3、复合持久对象的延迟加载技术(Lazy initialization)
解决方案 »
- image.write()多次发送出现的问题
- 做论坛遇到的表设计问题
- 获取父窗体的值
- 请教关于enctype="multipart/form-data" 的问题
- 用dom4j解析xml文档及开发过程中所想
- 注册用户代码有何错误(这个帖子的给分将在真是很奇怪???里给出)
- 如何读取这个XML文件?? 要求JAVA语言实现
- 能回答此问题的必定是高手!!!
- 请教:我配置的Apache+Tomcat测试开始页面成功!但运行jsp程序出错!
- 在Tomcat上调用Weblogic上的EJB问题
- 在linux 与window 之间创建远程通道时,啟動通道时,出现“找不到通道 'ch1'"错误 (websphere MQ 5.3)
- 在windows2003server中安装Tomcat5.0.18不成功!
写SQL更直观些2、真正以对象的方式来操纵数据库存储
不用对象就不好吗?面象对象是最好的程序设计方法吗?3、复合持久对象的延迟加载技术(Lazy initialization)
直接使用SQL会比这个慢吗?
而用复合持久对象的延迟加载技术:就不会立刻从数据库中取出来的,只需要1次sql操作,取出m或n个对象;
我这两天才查的资料
本来想用这玩艺写数据校验,结果没搞懂
继续在看ing
其实我感觉用Hibernate 可能比自己写SQL方便吧。看了很多论坛,对Hibernate 评价很好。
相对于使用JDBC和SQL来手工操作数据库,使用Hibernate,可以大大减少操作数据库的工作量。等你用了之后,你就会爱上它的,呵呵。
参数不确定,是不是指查询条件是否有不确定?只要简单的写一个类来生成查询条件不就行了?我不太清楚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没有问题,如果再写一个根据库表结构生成增删改查询方法的实体类,有什么不好?
HB是幼稚的技术.
没人会用他的API,都是从例子中拷贝,我无法对程序进行优化(听说它已经优化好了)。
Hibernate本身就增加了开发的复杂性,同时增加了许多不确定因素(因为用它的人都
不知道Hibernate怎么用)
跨数据库完全就是一句空话,谁没事整天换数据库呀!
如果没有,建议不要使用Hibernate!
不是每个人都可以用的好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.
java is dying, because there are toooooo.... many extensions, some are standardized, some not ,he is losting his simple feature.
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..
howell008,你不是能通过SessionFactory 得到 connection么?
这和你通过jdbc得到Connection有什么区别?
1.它帮我处理事务,当然配合spring就更棒拉。不要说你写持久层的东西从来不考虑事务处理的。
2.我仍然是对对象进行持久化,而不去理会数据库的存在。hibernate顾名思义冬眠,让数据库冬眠去吧。
3.写jdbc的时候,每次都要重复那些try,catch,close那些连接。让人厌烦,容易出错,也产生很多不必要的重复代码。记住重复代码是万恶之源。
第一次运行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数据库,谢谢
<?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里设置的类型不一样会出错。
new SchemaExport(cfg).create(true, true);
数据库还没有建表,所以,应该不是数据库字段与XML文件不匹配造成的吧?
就我的经验,如果没有好的代码规范,和代码控制能力,
SQL语句的调试是调试中花时间最多的东西,
但是如果你改用这个Hibernate的话
至少你只需要写HQL就够了,其它的Insert 和Update 就可以全免了,
而且你也不需要为你的字段和对象对应关系花脑筋了
不过我有一次测试发现Hibernate确实不简单,效率竟然和我自己用JDBC再封装差不多,大吃一惊。我现在很中肯的说:Hibernate并不是什么神奇的技术,也没有深奥的道理,不会JDBC和SQL的人最好
不要用,用的好确实可以提高开发效率。如果只是copy代码的话,迟早会使你的系统崩溃。