设计数据访问层时,想做到业务层能纯粹的只是访问数据访问层,而完全不了解数据库的结构(包括表、字段信息等)。
那么这样对模糊查询的众多查询条件的组合(包括and、or、=、like、between等),怎么实现好呢?如果让业务层自己写出查询条件,生成动态SQL语句来实现,那么业务层必须要了解表结构(这样不符合最初的设计思想)。
对于其他的操作,如更新、删除等也有同样的条件问题。
请问大家是怎么处理这个问题的,有什么好的经验?
谢谢!!!

解决方案 »

  1.   

    一般的做法是从业务层传递参数过来(也许很多),然后在数据层拼凑sql或用参数形式或继续传参数给存储过程.这样安全,但参数很多的时候就比较麻烦.
      

  2.   

    是啊,这样好像是比较麻烦。
    要是那些条件都是单纯的等于,然后连接关系是and,还好点。
    要是条件还包括like、>、<,连接是and和or的组合就很麻烦了。
    不知道有没有还有没有其他的解决办法啊。
      

  3.   

    强烈建议在存储过程的层面实现复杂查询,改起来容易,效率也比较高。另外,请看看我的《数据库开发规范》,给点意见
    第一版下载地址:http://www.21unicity.com/temp/db.doc
    第二版下载地址:http://www.21unicity.com/temp/db_ver2.zip
      

  4.   

    to ah__fu(阿福) :
        谢谢你的回复。
        你的文档我看了,但这个没有涉及到我提到的问题啊。
      

  5.   

    to web_gus(penny 路漫漫其修远兮,吾将上下而求索) :
        谢谢。
        你提到的把所有参数抽象成一个类里的具体属性是个好方法,但是查询条件所涉及到的这些属性该满足的要求,和这些要求之间的组合(and、or等的组合)该怎么表示呢?
      

  6.   

    to oyljerry(【勇敢的心】→ ㊣X-Man㊣) :
        是啊。有没有什么具体点的解决方案 ?
      

  7.   

    O/R Mapping 可能是你想要的。赫赫,比如nHibernate
    或者你可以看看 http://www.websharp.org