讨论:Dao查询接口设计经验

接受若干查询条件的DAO查询方法接口在实际应用中,大家不知道是如何设计,下面是我所了解的4种定义方法:

1)[b]为查询参数定义对象,如:[/b]
queryOrder(OrderQueryParam oqp)
OrderQueryParam为每一个查询条件项定义一个属性如:
Date startTime
Date endTime
int orderNo
int deptId
这种方式的优点是直观,接口清晰且稳定,但是需要定义大量的查询参数对象,比较麻烦。

2)[b]用一个Map封装所有查询条件,如:[/b]
queryOrder(Map filterMap)
每一个查询条件项对应filterMap中一个元素
key value
----------------
startTime 20060101
endTime 20061201
deptId 1002
这种方式的接口签名也是稳定的,其他的优点和缺点正好和1)点相反

3)[b]每一个条件项对应一个入参,如:[/b]
queryOrder(Date startTime,Date endTime,int orderNo,int deptId)
这种方式的接口签名不稳定,假如要加一个userId的条件,接口就得改了,但是接口也是比较清晰的。

4)[b]使用JDK5.0中提供的不定数入参,如:[/b]
queryOrder(String hql ,Object... args)
在该中方法中:(需要注意args的顺序和hql中变量的顺序一致),组装Hql的核心代码如下:
Query query = getSession().createQuery(hql);
for (int i = 0; i < args.length; i++) {
query.setParameter(i, args[i]);
}
这种方式接口签名也是稳定的,不过接口也是不清晰。

不知道大家在实践中还有没有其他好的方法,欢迎抛玉!!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值