我开始学习Spring Boot和MongoDB,并创建了一个简单的应用程序:一个User
拥有一个City
和一个Interests
列表。我希望能够找到居住在某个Users
中的City
的列表,以及拥有某个Interest
的那些列表。以下是相关的类:
User.java
@Document
public class User {
@Id
private String _id;
private String username;
private String password;
private String firstName;
private String lastName;
private Date birthdate;
@DBRef
private City city;
@DBRef
private List<Interest> interests;
/* ...constructors and getters */
City.java
@Document
public class City {
@Id
private String _id;
private String name;
/* ...constructors and getters */
Interest.java
@Document
public class Interest {
@Id
private String _id;
private String name;
/* ...constructors and getters */
UserRepository.java
:
public interface UserRepository extends MongoRepository<User, String> {
List<User> findByFirstName(String firstName);
List<User> findByLastName(String lastName);
}
UserController.java
:
@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
private UserRepository repository;
@GetMapping
public List<User> findAll() {
return repository.findAll();
}
@GetMapping("/{id}")
public Optional<User> findById(@PathVariable String value) {
return repository.findById(value);
}
@GetMapping("/firstName")
public List<User> findByFirstName(@RequestParam String value) {
return repository.findByFirstName(value);
}
@GetMapping("/lastName")
public List<User> findByLastName(@RequestParam String value) {
return repository.findByLastName(value);
}
@GetMapping("/city")
public List<User> findByCityName(@RequestParam String value) {
// TODO: Implement this
return null;
}
@GetMapping("/interest")
public List<User> findByInterest(@RequestParam String value) {
// TODO: Implement this
return null;
}
@PostMapping
public void save(@RequestBody User user) {
repository.save(user);
}
@PutMapping
public void update(@RequestBody User user) {
repository.save(user);
}
@DeleteMapping("/{id}")
public void deleteById(@PathVariable String id) {
repository.deleteById(id);
}
}
我正在为最后两个GET
方法苦苦挣扎-通过Users
或City
查找Interest
的列表。
我的第一个问题是-我正确进行了City
类中的Interests
和User
的“嵌入”吗?第二个问题-有人可以提示我如何实施搜索吗?是否可以“扩展”接口(就像我对名字和姓氏所做的那样),还是应该以某种方式使用@Query
?还是有第三种方法?谢谢。