做多条件查询的时候,我首先想到的是根据传过来的参数动态拼凑sql。
比如有3个输入框age,name,score,现在用户只在age里输入值,传到后台后,我拼成一条where age=:age的语句来查询。
而公司现有的做法是先直接把所有的参数写进sql(where age=:age and name=:name and score=:score)里,然后调用它的工具方法,它会解析那条sql,将多余的查询参数(页面没有输入值的参数)忽略掉。
我刚想了许久,一直没想明白这样的好处是什么。
看了它的代码许久,也没看明白它是怎样忽略参数的。

解决方案 »

  1.   

    损失一小部分运行性能,换取开发速度(当然,这个解析代码要写好),这年头,人工比硬件值钱多了话说,如果以后需求变化,除了age,name,score,有多了个gender,phone,height,weight,address,email....................,你要改好一会儿,写好多个if或者配置。
    另外,这些最常用的代码,合并到一处,降低了出错的概率。
      

  2.   


    动态拼接sql也可以抽象出一个工具类来加快开发速度啊
    【话说】这段话列举的缺点,你是指动态拼接还是指解析?
      

  3.   


    手工拼接: if (age......) {sqlBuffer.append(" and age = :age ")} ...动态拼接的话,如果是这样的sql,还是解析来的简单(:xxx变成jdbc的?,然后设置preparedStatement),而动态拼接,你需要附加很多参数:
    where age=:age and name LIKE :name and score > :score