关于Dao接口方法参数

fnet 08-01-13

查了网上很多资料,有的用一些ORM,简化了Dao的设计,但这个是不用ORM的,只能自己JDBC写Dao,看到了一些设计:

比如NewsDao接口中的一个查询方法,带分页,带一些参数,使用一个List装填结果,返回个数:
第一种:

...
//参数一堆
public abstract int getNews( List newsList , int pageNo , int pageSize , String where );
...


第二种:

...
//使用一个实现了Parameter接口的对象封装查询
public abstract int getNews( Parameter pBean );
...
//Parameter实现类如下
public class ParamBean implements Parameter {
int pageNo;
int pageSize;
List pageList;
//List内容填入这里,业务逻辑可以从这里面取,或者直接返回给jsp
String where;
//getter/setter略去
}


第三种:

...
//使用一个Map封装查询参数,再将Map中k/v对一一转成实际类型使用
// 比如第一页,总数10条,条件是时间大于192323200的记录
// Map: "pageNo":"1","pageSize":"10","where":"created > 192323200"
public abstract int getNews( List newsList , Map mParam );
...



我想,用第一种可能万一修改起这个接口实现每个都要动了,除非只增加。
第二种对象封装,service又要new一个Parameter对象出来了,而且用这种似乎没必要每个模块都写Dao,您想参数都恒定了。
第三种Map,需要转来转去,不知用哪一种好点,本人新手,请各位前辈指点迷津。
[该贴被fnet于2008-01-13 00:19修改过]

banq
2008-01-13 17:37

对你的要求不是很清楚,在没有严格要求的前提下,上面几种都可以,取决于你的应用场景。

如果从一个分页框架设计要求,这些写法都不完整,可以看看Jdon框架的分页框架源码,持久层可以是ORM或JDBC.