JavaWeb项目,DAO应该怎么写?

有一张字段足够多的表,要对它进行各种各样的查询:
根据字段A根据字段B,或者根据字段A和B,或者再加上字段C,然后可能还要加上分页,排序等等的逻辑。
现在的项目的DAO层为了满足上面这些需要出现了很多参数列表很长的方法,神烦不已。最初想到的是类似Hibernate的QBE方式,传给DAO一个实体类对象,但是一个实体类对象不能描述“范围”,更不用说用到IN的查询。
后来想到抽象出一种“查询”类,封装一些查询条件。个人感觉这个解决方案可行,但是遇到了很多问题,比如可能会把表结构直接暴露给Service,对于一些特别复杂的查询难以描述出来等等。
那么问题来了,DAO应该怎么写,或者说,Service应该传给DAO什么?

--来自网页客户端
已邀请:

produced - 00后

赞同来自:

如果真的特别复杂,我觉得应该至少分成DB访问(dao)和接口分析处理两层,DB访问根据查询条件,查询项目等的共性份成几个块,接口分析处理是对Service传过来的内容做分析,到底应该使用哪个DB访问的块,查询参数也可以在这里再组织。对于面向Service的接口,应该只是一些条件,标识变量(比如:使用哪个块)(当然你也可以不用标识变量,直接使用不同的类作为标识)。如果所有的查询所用的参数组合实在太多,造成接口太大,或表的字段全部暴露,我觉得应该分成多个接口。我觉得你应该先简单了解一下设计模式(比如:装饰器模式等),也许会有一些好的想法。

ps:如果你的查询的组合确实用到了所有表的字段,那么暴露表结构是不可避免。

      只能做一下伪装:分成多个接口;不使用表的字段名(比如:用数组,我想没人会通过数组很容易地分析出你的表结构)。

--来自网页客户端

要回复问题请先登录注册

Template error, template file not found