【问题标题】:Spring data jpa and json querySpring数据jpa和json查询
【发布时间】:2020-01-16 12:10:05
【问题描述】:

得到一个json请求体如下:

{
  "firstName": "John",
  "lastName": "Doe",
  "phoneNumber": "0123456789"
}

我想在MongoDB中搜索相关条目,即使缺少某个字段,在这种情况下,缺少的字段必须匹配任何值。

例如,以下查询将搜索具有匹配名字的所有条目:

{
  "firstName": "John"
}

虽然之前的 JSON 必须匹配所有 3 个参数。如果 3 个值之一为空白,则它应在搜索中包含空白。 但是,如果缺少键值对,例如在第二个 JSON 中,它必须匹配该键的任何值。

问题

  1. 我应该为所有组合编写一个查找器吗? 例如。类似于:
@Repository
    List<Phonebook.Entry> findAllEntries();
    @Query("{firstName : ?0, lastName: ?1}")
    List<Phonebook.Entry> findEntryByName(String firstName, String lastName);
    @Query("{firstName : ?0}")
    List<Phonebook.Entry> findEntryByFirstName(String firstName);
    @Query("{lastName : ?0}")
    List<Phonebook.Entry> findEntryByLastName(String lastName);
    @Query("{phoneNumber : ?0}")
    List<Phonebook.Entry> findEntryByPhoneNumber(String phoneNumber);
    @Query("{firstName : ?0, phoneNumber : ?1}")
    List<Phonebook.Entry> findEntryByFirstNameAndPhoneNumber(String firstName, String phoneNumber);
    @Query("{lastName : ?0, phoneNumber : ?1}")
    List<Phonebook.Entry> findEntryByLastNameAndPhoneNumber(String lastName, String phoneNumber);
    @Query("{firstName : ?0, lastName : ?1, phoneNumber : ?2}")
    List<Phonebook.Entry> findEntryByLastNameAndFirstNameAndPhoneNumber(String firstName, String lastName,String phoneNumber);
}
  1. 如何将查询转换为“喜欢”搜索? 例如,以下 JSON 将返回名字以“Jo”开头的所有条目,而不是问题 1 中的确切值。
{
  "firstName": "Jo"
}

谢谢!

【问题讨论】:

    标签: json mongodb java-8 spring-data-jpa


    【解决方案1】:
    1. 绝对不要那样做。像这样组合参数总是坏主意。
    2. 看看here在3.4部分如何模拟LIKE。您的方法应该类似于 findByFirstNameLikeOrLastNameLikeOrPhoneNumberLike(String firstName, String lastName, String phoneNumber) 。向此方法传递参数时,您应该传递empty String 而不是null。也许这种方法从性能方面来说并不是很好。

    另外,看看findByExample 描述的here 方法。

    【讨论】:

      猜你喜欢
      • 2012-05-04
      • 2021-02-17
      • 2019-04-01
      • 1970-01-01
      • 2015-08-04
      • 2022-01-24
      • 2018-06-27
      • 2015-03-07
      相关资源
      最近更新 更多