繁体   English   中英

如何在springboot中按对象搜索

[英]How to search by an object in springboot

在springboot中,您可以拥有一个extends JpaRepository<User, String>的存储库。

现在,如果要向该存储库写入查询,则可以编写多个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对象,并对此进行搜索?

谢谢。

您可以尝试使用JPA的Query by Example 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和所有可能的userName的唯一列表。

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

@Query(value = "SELECT DISTINCT u.lastName FROM User u WHERE u.firstName = ?1", 
       nativeQuery = true)
List<String> findDistinctLastName(String firstName);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM