Я начинаю изучать 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
?Или есть третий подход?Спасибо.