【问题标题】:How to do a search based on number of fields that has been filled如何根据已填写的字段数进行搜索
【发布时间】:2013-05-28 01:03:54
【问题描述】:

我正在实现一个搜索,其中用户需要填写不同的字段来进行搜索,但如果用户不填写某些字段,我不确定如何搜索。

假设我要求他们填写姓名、家庭、年龄、城市和国家

用户可以将这些中的任何一个留空,所以我应该根据填写的内容进行搜索。

例如,如果填写了姓名和家庭,只需搜索姓名和家庭,如果填写了姓名、家庭和国家/地区,则搜索包含所有这三项的记录。

我使用的是prepared statement,如果我使用Persitance API呢?

         ps.setString(1, "Name");
         ps.setString(2, "Family");
         ps.setint(3, "age");
         ps.setString(4, "city");
         ps.setString(5,"country");

查询

 SELECT * FROM Customer WHERE name = ? AND family = ? AND age = ? AND city = ? AND country = ?

【问题讨论】:

标签: java mysql jakarta-ee


【解决方案1】:

您需要删除引用未指定字段的表达式。

您可以拥有一个仅包含请求字段的SortedMap<String, Object>。对其进行迭代并使用 StringBuilder 构建 SQL where 子句并设置参数值。

一些 ORM 会为您执行此操作。

【讨论】:

  • 你能给我举个例子吗?我找不到一个,如果我使用字符串生成器,那么如何使用准备好的语句来做到这一点?
  • 语句生成后绑定值。这些值是一个列表,在您遍历字段时会附加到该列表中。 (还有squiggle用于生成SQL。)
【解决方案2】:

如果非常复杂,这种情况似乎需要Hibernate Criteria Query API 之类的东西。

【讨论】:

    【解决方案3】:

    Squiggle SQL Builder 可能适用于更简单的情况。

    【讨论】:

      猜你喜欢
      • 2020-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-04
      • 1970-01-01
      相关资源
      最近更新 更多