9

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

例子:

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

"select * from address where shopname = ?";

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

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

我有多个搜索字段。7 个字段。如果用户输入任何组合。我只根据参数进行搜索。如何动态地将参数传递给sql。需要片段/示例如何实现这一点。

4

4 回答 4

11

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

于 2011-05-22T15:45:18.963 回答
3

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

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

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

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

等等..并使用 NamedParameterJdbcTemplate

于 2018-05-26T21:21:27.107 回答
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)";
于 2015-03-17T13:49:33.690 回答
-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
于 2011-05-26T20:44:54.507 回答