在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对象,并执行搜索?
感谢。
答案 0 :(得分:0)
您可以尝试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);
你可以做其他奇特的事情。这是一个example。
Q值。有没有办法返回唯一的结果字段?因此,在该示例中,传递firstName将返回所有lastNames和所有可能的userNames的唯一列表
对于这种情况,我使用过本机查询。这是一个例子,
@Query(value = "SELECT DISTINCT u.lastName FROM User u WHERE u.firstName = ?1",
nativeQuery = true)
List<String> findDistinctLastName(String firstName);