to onefox(一品狐): 我对Hibernate有如下疑问,不知道是我不会用,还是Hibernate不支持。 1)对于数据库的int或者number类型,那么映射到Hibernate下应该是int或者是double类型。在数据库中如果该类型存着null,那么映射类型的int或者double根本不支持。 2)另外,Hibernate一定要一张表映射一个类。但是对于通用结构的程序来说是非常不利的,我根本不知道数据库的结构,我仅仅只希望取字段通过字符串来取。比如DataSet.Tables["Hello"].Rows[0]["MyField"]就是取字段为MyField的数值。
to idiotzeng: ResultSet仅仅只是一个接口,第一个条件也许符合,第二个条件绝对不行。因为我无法实例化一个接口啊。
我也说一些: DataSet其实很强,好像是跟数据库映射一样,如有个性质,好像是对DataSet里面的记录Edit过了(update or insert or delete),你acceptChange就可以写回数据库中,就好像一些持久层解决的对象持久交互。我觉得DataSet内核是内存的数据库,既然是数据库那么就有数据库表,表记录,表结构,表关系起码这些元素,那么我觉得你说的实现类似的类其实就是设计个微型数据库。 这是对1的看法.有了上面,再搞对别的数据源的通用映射就是2了。有了微型数据库3更加不要说了.
to onefox(一品狐): 我初用Java,很多不懂的。我习惯的工具是.net和Delphi,呵呵,好像Java都不合适。我是做通用模块的,我根本不关心具体的数据库。因为很多东西抽象好了以后,作为程序员,很少的代码就能做很多的工作。如果,每个表一定要有一个具体的类,那就太没搞头了。 对了,我关于Hibernate的两个疑问,能否回答?
to liufuyahong: 1)我以前也是做Delphi的,而且Delphi非常熟悉。因为现在主要是做Web应用程序,所以,对DataSet的性能非常关心。如果性能差,功能再强也要放弃,JBuilder中的QueryDataSet我就用过,效率太差了。相比之下,由于Web不需要和控件做binding,所以,DataWare功能对我来说无所谓的。 2)断开式的DataSet,在Delphi中也是有的,TClientDataSet就是的,很典型,而且可以和XML相互转化。 3).net的DataSet和Delphi的DataSet本质上是不一样的。.net的DataSet相当于Delphi中DataSet的集合。不过,能做好Delphi的DataSet,组合一下就OK了,这个不会太复杂的,和XML转化也一样,不用写太多程序的,用DOM分析一下还是比较容易的。
to chechy(www.qdocuments.net) 如果一个表不对应一个结构,无论是什么结构,那么应如何实现呢,我现在就是因为这个问题也头痛的不行,由于表的字段多,所以一个结构实现一个Serializable接口或者将多个表结构实现一个Serializable(其它表作为它的属性)去实现的,不知道楼言有什么好的方法,给我们这些菜上一堂课
能引起大家的重视和讨论,我很高兴。虽然到现在,没有非常完满的结果。 to usabcd(9号公路上的3名共军) :如果你发现,原先做一张表需要几天,现在最多1小时。可能寥寥几行代码就完成了你需要的列表、新增、修改、查看、删除功能的时候,你就不会认为通用的程序有多不好了。 to laoxing521(阳光): .net回写数据库也是非常简单的,最直接的你可以用CommandBuilder,我自己也封装了一个回写的类和CommandBuilder类似,呵呵,非常方便。我个人相信ResultSet应该是离线的,但是对应内存表,恐怕还没有。jdk1.5有CachedRowSet(大概是这个名字),可能确实符合我的要求。
to shine333(enihs) :希望你不要恪守教条。难道类不实现接口,就不是好类!就像难道类的继承最多只有3层一样,这些如果恪守下去,必然约束了自己的思维,限制了自己的思路。 我个人认为我领悟了面向对象,我从来不遵守那些约定的规则。我认为规则是普遍规律,是给初学者的建议。但是真正领悟的人,如果恪守这些规则,就是给自己套上了紧箍。我的方针就是,宁可我开发的基类复杂一些,多处理一些,也要让用这些类的程序员简单,再简单。 另外.net的DataSet实现了不少接口,但是这些接口和DataSet本身的主体功能没有直接关系。
com.borland.dx.dataset我已经试过了,不行,性能非常差。我希望一种高效的,内存表的管理结构。
我对Hibernate有如下疑问,不知道是我不会用,还是Hibernate不支持。
1)对于数据库的int或者number类型,那么映射到Hibernate下应该是int或者是double类型。在数据库中如果该类型存着null,那么映射类型的int或者double根本不支持。
2)另外,Hibernate一定要一张表映射一个类。但是对于通用结构的程序来说是非常不利的,我根本不知道数据库的结构,我仅仅只希望取字段通过字符串来取。比如DataSet.Tables["Hello"].Rows[0]["MyField"]就是取字段为MyField的数值。
ResultSet仅仅只是一个接口,第一个条件也许符合,第二个条件绝对不行。因为我无法实例化一个接口啊。
DataSet其实很强,好像是跟数据库映射一样,如有个性质,好像是对DataSet里面的记录Edit过了(update or insert or delete),你acceptChange就可以写回数据库中,就好像一些持久层解决的对象持久交互。我觉得DataSet内核是内存的数据库,既然是数据库那么就有数据库表,表记录,表结构,表关系起码这些元素,那么我觉得你说的实现类似的类其实就是设计个微型数据库。
这是对1的看法.有了上面,再搞对别的数据源的通用映射就是2了。有了微型数据库3更加不要说了.
我的意思是说:用一个“持久模块”+“Set” 外面套一个“包装类” 差不多可以达到你要的效果了。当然,这个方法是不能轻松通用其他项目的
我初用Java,很多不懂的。我习惯的工具是.net和Delphi,呵呵,好像Java都不合适。我是做通用模块的,我根本不关心具体的数据库。因为很多东西抽象好了以后,作为程序员,很少的代码就能做很多的工作。如果,每个表一定要有一个具体的类,那就太没搞头了。
对了,我关于Hibernate的两个疑问,能否回答?
我初学Java,请多多关照!
获取表和其字段后,生成相应的.java,再调用javac编译,然后动态加载编译后的class,(盖原来的class)。
第一个问题,我的想法和你类似。
对第二个问题,我不敢苟同,你不觉得这个方法很慢吗?而且不讲效率。相比之下,用ResultSet似乎更合适,不过ResultSet也有不爽的地方,就是String要用getString(),Int要用getInt()之类的,没有一个通吃的,相比之下,.net在这点比Java强多了。
当然要在Java中实现,我认为肯定是可以的,但是为什么JDK不去实现呢?或者没有现成的?如果OR Mapping这么复杂,我宁可不用。
变动吧,所以动态加载类及创建xml文件也只是初始时发生吧?
呵呵,在.net钟,我的字段名事先有了,只要一个表名作为参数带入,然后我就可以生成select field1, field2... from TableName的SQL语句,用DataAdapter轻松的Fill到DataSet钟,然后操纵数据,再通过DataAdapter回写,多少方便了,呵呵!所以实现.net的上述功能,我看啊,还是用ResultSet方便,但是ResultSet不能直接创建内存表,所以我才问这个问题。
等等等等……
其他的功能我还在想,不过像楼主所说的断开式DataSet我一时还想不出什么好办法?至于与xml的交互,我想我应该可以做到(当然要花比较长的一段时间)。
1)我以前也是做Delphi的,而且Delphi非常熟悉。因为现在主要是做Web应用程序,所以,对DataSet的性能非常关心。如果性能差,功能再强也要放弃,JBuilder中的QueryDataSet我就用过,效率太差了。相比之下,由于Web不需要和控件做binding,所以,DataWare功能对我来说无所谓的。
2)断开式的DataSet,在Delphi中也是有的,TClientDataSet就是的,很典型,而且可以和XML相互转化。
3).net的DataSet和Delphi的DataSet本质上是不一样的。.net的DataSet相当于Delphi中DataSet的集合。不过,能做好Delphi的DataSet,组合一下就OK了,这个不会太复杂的,和XML转化也一样,不用写太多程序的,用DOM分析一下还是比较容易的。
如果一个表不对应一个结构,无论是什么结构,那么应如何实现呢,我现在就是因为这个问题也头痛的不行,由于表的字段多,所以一个结构实现一个Serializable接口或者将多个表结构实现一个Serializable(其它表作为它的属性)去实现的,不知道楼言有什么好的方法,给我们这些菜上一堂课
我现在用的就是JDK1.5,请问是哪个类呀?
这个控件实际上是一个小型数据库。
DataSet.Tables["Hello"].Rows[0]["MyField"]
java里虽然没有这样的直接类,但实现这个结构本身还是很容易的。
至于写xml或getString等都是鸡毛蒜皮的小事。
关键是与数据库交互的逻辑。有些问题想问一下。你说的这个DataSet它是分页的吗
或是有默认的每页多少记录。
否则如果数据有几十万怎么操作(不会全部读内存吧)?
另外涉及到很多复杂的问题。理论上,如果我在一个几十万数据的这个
反复增加修改删除了数十个表的数百条记录,
(中间不保存,而且还有些数据库的表没主键)
具体怎样保存?用什么方案?
(注意这个DataSet表还跟实际的表不是对应关系)
我想如果这个DataSet表跟物理数据差别很大,其中必定有十分复杂的逻辑关系。
而这些都是与具体的业务相关的,有必要做成一个通用的东西么。
如果有这功夫写这个看起来通用(天知道有多少毛病和隐患?)的东西,
项目早搞完了吧。
个人觉得还是跟数据库表一一对应比较好把握。
即使这样对于大数据量操作都还有一些难点。
我感觉,在数据库连接这方面,ADO.net是java所不能比的,DataSet的功能非常强大我对DataSet的理解是,用作查询,是上上之选,在做一个与数据库有关系的程序时,最频繁的操作莫过于查询了,将所要查询的数据都映射到DataSet,存在内存中,而减少与数据库的连接消耗,真是天才般的想法,可惜,SUN的牛人当时没想到在更新的时候,我还是自己去写更新代码,因为DataSet中的数据与数据库中的数据并不完全对应,在将数据读入到数据集的时候,我自己加了一些表或列,用于存储一些汇总结果,这样,在程序中,也不要自己写代码去计算所需要的一些汇总数据了.
更新操作的频率远远不及查询操作,每更新一次,再重新Fill一下DataSet
我就是这样做的 楼上的人说,JDK1.5 己经有了,请问指的是JDK1.5己经发布了,还是在JDK1.5中与有了类似于ado.net的数据集的东东?如果是后者的话,请求指点一二
我的E-Mail: [email protected]
to usabcd(9号公路上的3名共军) :如果你发现,原先做一张表需要几天,现在最多1小时。可能寥寥几行代码就完成了你需要的列表、新增、修改、查看、删除功能的时候,你就不会认为通用的程序有多不好了。
to laoxing521(阳光): .net回写数据库也是非常简单的,最直接的你可以用CommandBuilder,我自己也封装了一个回写的类和CommandBuilder类似,呵呵,非常方便。我个人相信ResultSet应该是离线的,但是对应内存表,恐怕还没有。jdk1.5有CachedRowSet(大概是这个名字),可能确实符合我的要求。
我个人认为我领悟了面向对象,我从来不遵守那些约定的规则。我认为规则是普遍规律,是给初学者的建议。但是真正领悟的人,如果恪守这些规则,就是给自己套上了紧箍。我的方针就是,宁可我开发的基类复杂一些,多处理一些,也要让用这些类的程序员简单,再简单。
另外.net的DataSet实现了不少接口,但是这些接口和DataSet本身的主体功能没有直接关系。
几乎每样在.NET 的中包装好的现成的东西你都将在JAVA中自己实现!烦!
在ADO.NET 方面个人认为.NET 已经大幅领先JAVA!DataSet / DataTable / DataRow / DataColumn 真的好用!