[英]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.