讨论一下,关于使用DAO的情况,作一个简单介绍:)

过客猫2022 2004-01-11 06:13:51
我用的是我自已写的XDAO 0.1,已完成大部分。主要分为四部分:dao,table,tools,model。
dao:为数据库控制部分,如Insert,Delete,Modify,Page,Query,Expression,Order,GroupBy等控制部分的实现。
tools:为model定义文件及table对象源文件生成部门。如数据库表Users,就会生成相应的UsersModel.xml及UsersModel.java
model:定义了表的模型,说明表的内容
table:也就是存放UsersModel.java文件的包!
例:
UsersModel user=new UsersModel();
XInsert insert=new XInsert(conn,user);
user.setId(100);
user.setLoginname("admin");
user.setPassword("8888");
insert.doWork();
//这样就插入了一条记录
XDelete del=new XDelete(conn,user);
XConditionGroup g=new XConditionGroup(); //参考habernate的方法
g.and(XExpress.eq(user.FIELD_ID,100))
.or(XExpress.eq(user.FIELD_ID,101))
.or(XExpress.between(user.FIELD_ID,20,30));
del.doWork(g);
//这样就删除了id=100,101或id<=30,>=20的记录
//会生成这样SQL语句DELETE USERS WHERE (id=100) OR (id=101) OR (id between 20 and 30)
:)

就这样,哈

...全文
146 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
freebirdwjy 2004-07-05
  • 打赏
  • 举报
回复
stonecsdn 2004-01-13
  • 打赏
  • 举报
回复
学习。
xue_sharp 2004-01-13
  • 打赏
  • 举报
回复
答:xue_sharp(靠):你说的很对,你不要跟我说:你第一次交作业就是满分!还有,你写过的程序,可能已经被人写过很多遍了,也很优秀?那你还要不要写程序?对于haternate,是优秀,那要JDO做什么?
------------------------------------------
正因为JDO 1.0的糟糕,所以hibernate才没有兼容它,正因为hibernate比jdo 1优秀的太多,所以JCP邀请hibernate的作者参与jdo 2的规范的制定。在jdo 2出来以后hibernate是会兼容它的。

没有人要求你的作业是满分,只是看到看到有些不通顺,提醒你一下。
Schlemiel 2004-01-13
  • 打赏
  • 举报
回复
to zdhsoft(冬瓜猫):

我和你的看法有点差异。

第一,国人有很多高手。不用看太远,就在我身边,很多朋友把Hibernate的内部机制摸得非常清楚,他们完全知道应该如何做一个O/R mapping。但是他们没有去做,因为这是在重新发明轮子,是浪费时间。如果发现有什么值得改进的地方,他们会直接与Gavin King联系,直接对Hibernate改进。还有一些国内的高手已经进入了世界的主流J2EE社群,只不过你不知道而已。

第二,不自己写工具不代表不明白内中的原理,更不代表自以为是;同样,自己写工具往往倒是自以为是的态度。时间总是很宝贵的,一件事情知道怎么做就足够了,不一定非要做出来。
xue_sharp 2004-01-13
  • 打赏
  • 举报
回复
而且你用的Xupdate(conn,user)能处理
update USERS set PASSWORD = '1234' where PASSWORD is null
这种多记录更新的情况吗?
其实hibernate也不能处理所有的情况,毕竟有的地方要用到很特殊的sql。

推荐你看看ibatis(www.ibatis.com)是个非常简单的sql/mapping的工具包,可能对你完善你的dao有所帮助。
过客猫2022 2004-01-12
  • 打赏
  • 举报
回复
我对的java还认识不够,虽然会做些糼稚的事情,但我也不怕见丑!
java我也用了一段时间了。确切的说,我的那些程序,其实也就是在JDBC上做了些封装。因为上面的程序,还没有实用,所以还有很多问题没有发现,这两天我也改了不少BUG,我正在改进它。楼上那位,可以看得出,你的接触的比较多。你说的那些Spring,Transaction,hibernate呢,我只接触了hibernate,我看了不少代码!其中我参考了hibernate的部分表达式的表达方式。我想为什么是中国的开源程序很少?我想是自以为是高手的太多了,只会使外国人的工具,而不会去创造。我本想把这些代码公开,虽然是很差的东西,但毕竟我做为中国人写第一个工具,现在看没有必要了。
alienbat 2004-01-12
  • 打赏
  • 举报
回复
先撇开EJB不谈,你的DAO构件做的不地道。
1.XInsert与User对象以及数据库的表耦合度过高。
2.数据库连接应该是由DAO对象负责的,因为DAO对象屏蔽底层数据库的细节。如果我猜得不错的话,XInsert需要传入Connection对象以建立数据库连接?所以XInsert没有尽到自己的职责。

Schlemiel 2004-01-12
  • 打赏
  • 举报
回复
to nothing(nothing):

请问Hibernate的运行效率低在哪里?麻烦你说出个门道来,别在那边主观臆测胡说八道。

Hibernate的实现方式是在简单JDBC连接的外面包装了一层动态代理,如果有效率损失就是反射调用的损失。而lazy loading和cache的效率提升完全足以弥补这一点点的损失——反射调用是内存操作,lazy loading和cache节约的是数据库存取操作。

“大部分代码都自己写”就能保证高效率?考虑你的水平和你代码的使用范围,能比经过这么多实际项目检验的成熟框架更好?我还真就不信了。请记住,90%的效率耗费在10%的代码上,如果没有足够多的实际项目检验,你找不到那10%。

to zdhsoft(冬瓜猫):

如果你想要一个简便的JDBC封装,Spring会是不错的选择。至少你可以先参考一下Spring的JDBC template或者AOP,看看它是怎么处理transaction的。从你现在的做法来看,transaction并没有一个统一的处理方式(或者说,仍然要手工控制)。如果一个持久化框架仍然要求手工控制transaction,那我宁可没有它。所以,transaction和并发控制,这才该是你要考虑的第一件大事。
nothing 2004-01-12
  • 打赏
  • 举报
回复
严重支持 zdhsoft(冬瓜猫) !!!!支持原创!!

跟你一样,程序里大部分框架都是自己写的,什么struts,hibernate?嘿嘿,运行效率太低!只有部分参考价值.

//就算你花三年时间,就算你做得再好,能好过Hibernate?能好过JDO?
//重新发明轮子怎么也不会是聪明的做法。

我们不是发明轮子,是在改进轮子.
xue_sharp 2004-01-12
  • 打赏
  • 举报
回复
XInsert insert=new XInsert(conn,user);
insert.doWork();这么设计感觉很别扭。

而且hibernate做的已经很优秀了,我们就不要重复发明轮子了。
过客猫2022 2004-01-12
  • 打赏
  • 举报
回复
楼上说的没错,我写这个仅是为了学习!我还有好多东西要学。还有各种java的模式!:)

不过,有一点需要说明:请看清题目,而不是讨论我写的东西,0.1版的东西,也只是一个邹型!我的技术还非常有限,暂时不能做出全面的DAO,也不是凭我一人之力,能解决的。
Schlemiel 2004-01-12
  • 打赏
  • 举报
回复
你首先要搞清楚一个概念:DAO(Data Access Object)是application里面的一个层次,负责application与持久化介质之间的交互。DAO接口是每个application要单独设计的,一个设计良好的DAO应该将持久化方式完全隔离起来。你做的这个东西顶多算一个不彻底的O/R mapping工具或者数据库工具。

持久化技术上,我现在比较喜欢的是Hibernate,entity bean也用过,偶尔用一下JDBC(借助Spring的JDBC template)。为什么说你做的这个东西还极不彻底?因为你考虑的问题实在太少了——仅仅能生成SQL有什么用?事务怎么处理?cache怎么处理?这些问题如果考虑不到,那就只能是一个玩具。
过客猫2022 2004-01-12
  • 打赏
  • 举报
回复
不要争这个题外话,我想了解的一下你们用的是什么DAO,或JDO?
Schlemiel 2004-01-12
  • 打赏
  • 举报
回复
就算你花三年时间,就算你做得再好,能好过Hibernate?能好过JDO?重新发明轮子怎么也不会是聪明的做法。

“你写过的程序,可能已经被人写过很多遍了,也很优秀?那你还要不要写程序?”——答案是不要写。只要有人做过,只要可以利用,就不要再去重复劳动,那不是程序员应该做的事。
过客猫2022 2004-01-12
  • 打赏
  • 举报
回复
申明:我的XDAO是0.1版,我不可能把它做得非常好,最重要的是把它做完。后续的版本我会改进,会让它成熟!
过客猫2022 2004-01-12
  • 打赏
  • 举报
回复
其实,做这个重在学习。谁也不能保重,谁第一次做的时候,就是非常先进的。人总是要不断进取的,如果仅是拿来主义,那我们做的工作就会非常机械。而这些的东西都是外国人的,而不是中国人自已的。很多东西做了之后,才会发现,我们原来要学的东西。

答:alienbat(死灵巫师) :吃过饭是不是不用再吃了?有了C/C++为什么还有Java?C#?...,你认为Java?C#是多此一举吗?
对于内聚和耦合,我觉得要适当。对于组件与组件,当然内聚。当然对于组件,耦合是难免的。其实,Insert等操作,本就是与对象直接关联,只是在这里将它分开了,所以耦合度那是是当然的!

答:xue_sharp(靠):你说的很对,你不要跟我说:你第一次交作业就是满分!还有,你写过的程序,可能已经被人写过很多遍了,也很优秀?那你还要不要写程序?对于haternate,是优秀,那要JDO做什么?

过客猫2022 2004-01-11
  • 打赏
  • 举报
回复
??什么?你能说明白一点吗?我用的是resin 2.11-ee+struts开发
alienbat 2004-01-11
  • 打赏
  • 举报
回复
多此一举
实体bean就是VO和DAO的结合体。不去用那个自己写做什么。

23,407

社区成员

发帖
与我相关
我的任务
社区描述
Java 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧