做多条件查询的时候,我首先想到的是根据传过来的参数动态拼凑sql。
比如有3个输入框age,name,score,现在用户只在age里输入值,传到后台后,我拼成一条where age=:age的语句来查询。
而公司现有的做法是先直接把所有的参数写进sql(where age=:age and name=:name and score=:score)里,然后调用它的工具方法,它会解析那条sql,将多余的查询参数(页面没有输入值的参数)忽略掉。
我刚想了许久,一直没想明白这样的好处是什么。
看了它的代码许久,也没看明白它是怎样忽略参数的。
比如有3个输入框age,name,score,现在用户只在age里输入值,传到后台后,我拼成一条where age=:age的语句来查询。
而公司现有的做法是先直接把所有的参数写进sql(where age=:age and name=:name and score=:score)里,然后调用它的工具方法,它会解析那条sql,将多余的查询参数(页面没有输入值的参数)忽略掉。
我刚想了许久,一直没想明白这样的好处是什么。
看了它的代码许久,也没看明白它是怎样忽略参数的。
另外,这些最常用的代码,合并到一处,降低了出错的概率。
动态拼接sql也可以抽象出一个工具类来加快开发速度啊
【话说】这段话列举的缺点,你是指动态拼接还是指解析?
手工拼接: if (age......) {sqlBuffer.append(" and age = :age ")} ...动态拼接的话,如果是这样的sql,还是解析来的简单(:xxx变成jdbc的?,然后设置preparedStatement),而动态拼接,你需要附加很多参数:
where age=:age and name LIKE :name and score > :score