当前位置: 首页 > 知识库问答 >
问题:

如何在springboot中通过对象搜索

陆正奇
2023-03-14

在springboot中,您可以拥有一个扩展JpaRepository的存储

现在,如果您想向该存储库写入查询,您可以编写多个findBy查询,例如:

User findByUsername(String username);
User findByFirstName(String firstName);
User findByFirstNameAndLastName(String firstName, String lastName);

然后您需要匹配的控制器,例如:

@RequestMapping(value = "/users/{username}" , method = RequestMethod.GET)
public @ResponseBody List<User> getUser(@PathVariable("username") String username) {
    return userService.findByUsername(username);
}

等等等等。。。

我不想为每个元素组合编写每个findBy,并创建所有匹配的控制器。

所以我想知道的是,如何通过一个完整的物体进行搜索。例如,发布类似

{
"username":"freddy"
}

将按用户名和密码进行搜索

{
"firstName":"Fred",
"lastName":"Doe"
}

将按名字和姓氏搜索。

有没有办法同时编写JpaRepository方法和控制器,可以获取(在本例中)具有任何字段组合的User对象并执行搜索?

谢谢


共有1个答案

齐迪
2023-03-14

您可以通过示例尝试JPA的查询JpaRepository扩展了另一个名为QueryByExampleExecutor的接口,该接口有很多方法可以通过示例进行搜索。下面是一个简单的例子,

// here the first name, last name, and username may be null 
// or not null. Make sure that they are not all at the same time
String firstName = "James";
String lastName = null;
String userName = "jbond";

Example<User> example = Example.of(new User(firstName, lastName, username));
Iterable<User> = repository.findAll(example);

你可以做其他有趣的事情。下面是一个例子。

问:有没有办法返回唯一的结果字段?所以在这个例子中,传递firstName将返回一个唯一的列表,其中包含所有的lastname和所有可能的用户名

对于这种情况,我使用了本机查询。这是一个例子,

@Query(value = "SELECT DISTINCT u.lastName FROM User u WHERE u.firstName = ?1", 
       nativeQuery = true)
List<String> findDistinctLastName(String firstName);
 类似资料:
  • 我在这里遵循这个例子: https://www.elastic.co/guide/en/elasticsearch/reference/current/nested.html 以下查询: 与预期的一条记录匹配。假设我只想返回用户为“约翰·史密斯”和“艾利斯·怀特”的文档。 我试过: 但这返回零结果。我如何获得同时包含“Alice White”和“John Smith”的文档(这应该只是在原始结果中

  • 我有两个java对象:MyObject和MyObjectDetails 搜索空值或空字符串的最佳且简单的方法是什么? 实际上,我正在为这个类使用一个特定的验证器,逐字段检查空值和空字符串。 例如,要检查空值,我使用: 但我也很喜欢将来可以用来制作其他物体的东西。

  • 假设mongodb文档(表)“users”为 我想找到1975年必须获得“国家奖章”的人,可能还有其他人在不同的年份获得该奖项。 我怎样才能找到这个人使用奖励类型和年份。所以我可以得到确切的人。

  • 问题内容: 假设mongodb文档(表)“用户”为 我想找到获得“国家奖章”的人,必须在1975年获得该奖。可能会有其他人在不同的年份获得此奖。 如何使用奖励类型和年份查找此人。这样我就可以找到确切的人。 问题答案: 正确的方法是: 允许您在同一数组元素中匹配多个组件。 没有mongo的用户会在1975年代和某些奖项中寻找获得National Medal的用户,但不会寻找1975年获得Nation

  • 我有这个对象,我需要过滤它。 我只需要在“数据”中输入“isEnabled”为真的值的ID