论坛首页 Java企业应用论坛

只需要一个DAO,是个好主意吗?

浏览 48385 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (5) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-04-23  
只有一个估计会困难点,两个吧 ,一个HIBERNATE的支持POJO一个用JDBC的jdbcTemplate.SQL本来就是业务逻辑的一部分,可以考虑用ibatis.
0 请登录后投票
   发表时间:2009-07-06  
刚发表了篇文章“我给dao的瘦身方法请大虾拍砖!”,打算这样实现,大虾们可以看看拍拍砖!http://www.iteye.com/topic/420989
0 请登录后投票
   发表时间:2009-07-09   最后修改:2009-07-09
jacklondon 写道
如果 SQL 以及 SQL PreparedStatement 参数准备,都不在 DAO 中,那么实际上可以将 DAO 简化。
不建议将 SQL PreparedStatement 参数准备放在 DAO 之外的地方。一般都是这样:
public class LoginDAO{
    boolean validateUserPass(String userLoginName,String pass){
        PreparedStatement stmt = ...
        Object[] parameters = {userLoginName,pass};
        mergePreparedStatementAndParameters(stmt,parameters);
        stmt.exec....
    }
}
建议的 DAO 参数传入为 (String userLoginName,String pass), 不建议用 (Object[] parameters).估计搂主的DAO 参数传递是用 (String sqlId,Object[] parameters),这样才会想到简化成一个 DAO.
我不太喜欢 Ibatis, SQL 准备与参数准备分开,很难发现参数传递顺序错误。我们现在使用 middle-gen + ANT 来自动生成基于 JDBC 的 DAO/model, 每个表一个 DAO,不用人工写一行代码,也很方便。


我不是很理解关于 "Ibatis, SQL 准备与参数准备分开,很难发现参数传递顺序错误。"的观点,ibatis的参数是面向对象,似乎并不存在需要解析参数顺序的问题.

如果我们在这里把DAO是一个面向statement的query的话,我想一个类就足够了.(事实上所谓的date access 工作我们交给ibatis去干了,这里的BaseDao已经失去了作为DAO的意义,它不过是一个更方便的util)
当然如果想做更多的事情,对BaseDao做扩展我也没觉得有什么别扭的.


0 请登录后投票
   发表时间:2009-07-09  
我做CRM时就是每个service对应一个dao,项目收尾,越发觉得代码冗余到不可想象的地步,非常痛苦,最近不这么做了,全部封装到一个BaseDao,实现类继承该类,调用该类中的方法,传入自己的参数,这样好多了
0 请登录后投票
   发表时间:2009-07-24  
DAO是否分解,涉及到了一个问题,元问题,我们抛去开发的工作量,所有的DAO都放在一个文件中,是否符合java开发的思想呢。既然面向对象,DAO,就是一个对象的一部分,所以适当的分解DAO文件,是一个好主意
0 请登录后投票
   发表时间:2009-07-26   最后修改:2009-07-26
人的思想永远是第一位的,考虑问题的目的不是服务于某个语言,应该善于利用工具,代码少的项目自然调理清晰,dao的目的是为了解耦以及单元测试,但感觉有时候是为了解耦而解耦,对于一般项目,更换底层数据库的情况少之又少,对于数据层的解耦变得毫无意义。
0 请登录后投票
   发表时间:2009-10-03  
Laynepeng 写道
我怎么觉得回复都没注意看原文呢?作者现在的问题是:

他们把所有的HQL,SQL全部放在外部XML里面,然后DAO层只是通过读取外部XML调用里面完成业务的HQL/SQL。

这种方式我之前一个项目见过,但更好玩一点,外部是一个properties文件,然后通过key获取SQL,完成查询。Hibernate都没有用。但是在这里,我感觉和你们的解决方案没什么区别。。。

我觉得从代码易读性来看。按照Domain分一分开会不会让程序更清楚一点?我还是潜水去各位大虾的意见吧。。。

我现在手上的两个项目都是把sql/hql语句放在properties文件里的,但语句可以放,参数不能放,所以同一个查询,因为参数条件的不同,还是得重载dao函数.map是能解决一定的问题,但不是全部...
0 请登录后投票
   发表时间:2009-10-04  
我觉得还是简单直接,傻傻的dao好,可以多人并行工作,也便于初级成员上手。
0 请登录后投票
   发表时间:2009-10-23  
snakeqi 写道
封装了基本CRUD操作的DAO可以作为基类,其它有特殊要求的DAO可以继承这个DAO,这样既做到了代码重用,也可以把变化的部分分离。

这样做不错!
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics