锁定老帖子 主题:讨论:Dao查询接口设计经验
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2006-11-02
1)为查询参数定义对象,如: queryOrder(OrderQueryParam oqp) OrderQueryParam为每一个查询条件项定义一个属性如: Date startTime Date endTime int orderNo int deptId 这种方式的优点是直观,接口清晰且稳定,但是需要定义大量的查询参数对象,比较麻烦。 2)用一个Map封装所有查询条件,如: queryOrder(Map filterMap) 每一个查询条件项对应filterMap中一个元素 key value ---------------- startTime 20060101 endTime 20061201 deptId 1002 这种方式的接口签名也是稳定的,其他的优点和缺点正好和1)点相反 3)每一个条件项对应一个入参,如: queryOrder(Date startTime,Date endTime,int orderNo,int deptId) 这种方式的接口签名不稳定,假如要加一个userId的条件,接口就得改了,但是接口也是比较清晰的。 4)使用JDK5.0中提供的不定数入参,如: 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]); } 这种方式接口签名也是稳定的,不过接口也是不清晰。 不知道大家在实践中还有没有其他好的方法,欢迎抛玉!! 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2006-11-02
还有一种方式就是用数据来传条件入参,位置和hql中的?一致。
|
|
返回顶楼 | |
发表时间:2006-11-03
List query(String sql,Map conditions);
这样设计如何? |
|
返回顶楼 | |
发表时间:2006-11-03
直接queryOrder(String hql) ,在接口之外抽象形成hql语句生成器,这个生成器可以接受参数对象或者Map,但是参数命名遵循一定规范,生成查询语句。
|
|
返回顶楼 | |
发表时间:2006-11-03
这样这个接口的职责也会更清晰。
|
|
返回顶楼 | |
发表时间:2006-11-03
利用hibernate的QBE查询,传入一个对象为参数。只是不能查这个对象的id字段,既是数据库中的主键。
marshal402的sql生成器方式不错,只是如何抽象设计好,值得讨论。 |
|
返回顶楼 | |
发表时间:2006-11-03
Map做参数传递在Spring的DAO包中用得很多
|
|
返回顶楼 | |
发表时间:2006-11-03
查询的判断条件,结果排序等其他的要求,按上面那些方法就不能实现了。
|
|
返回顶楼 | |
发表时间:2006-11-03
用iBatis,在bean和dao一对一的情况下,直接用bean做参数,statement用动态的,这样就不用考虑参数的问题。
如果是多参数跨表查询,我认为还是用Map好一点 也可以自定义一个参数对象,稳定的部分用bean,不稳定的部分用Map |
|
返回顶楼 | |
发表时间:2006-11-03
|
|
返回顶楼 | |