Spring jdbcTemplate动态where子句

时间:2011-05-22 15:36:38

标签: spring jdbctemplate

是否可以通过Jdbc模板生成任意条件SQL查询:

示例:

如果我为1参数(仅名称)传递值:按名称搜索

"select * from address where shopname = ?";

如果我为2参数(名称和城市)传递值 - 按店铺名称和城市搜索:

"select * from address where shopname = ? and city = ?";

我有mupliple搜索字段。 7个领域。如果用户输入任何组合。我只根据参数搜索。如何动态地将参数传递给sql。需要片段/示例如何实现此目的。

4 个答案:

答案 0 :(得分:9)

你想要的是构建api的某种标准,Hibernate具有这种标准。不幸的是,我不认为Spring的JdbcTemplate有这样的设施。如果我错了,其他人会纠正我......

答案 1 :(得分:0)

Spring Data和Hibernate具有这种功能。虽然可能不值得在你的应用程序这么大的框架中拖动。

您可以尝试查看SimpleJdbcInsert http://docs.spring.io/spring/docs/current/spring-framework-reference/html/jdbc.html

编辑: 或者你可以尝试在SQL中修复它并检查为空,但是如果你有大量的数据要通过,这种技术会降低你的请求。

"select * from address 
where (shopname = ? or shopname = null)
 and (city = ? or city = null)";

答案 2 :(得分:0)

虽然有些人已经建议Hibernate是最好的方法,但我认为你可以尝试这种方法 -

String sql = "select * from address where 1 = 1";

if(shopname != null)
  sql += "and shopname = :shopname";

if(city!= null)
  sql += "and city = :city";

依此类推..并使用NamedParameterJdbcTemplate

答案 3 :(得分:-3)

如果Scala是您的选项,则可以使用以下内容构建查询:

case class Search(shopname:String, city:String = None) {
 def sql = "select * from address where shopname = '"+shopname+"'" + city.map(" and city = '"+
      _ +"'").getOrElse("")  
}

使用示例:

Search("lloh").sql
Search("lloh", Some("Austin")).sql