„Удобен“ и „мощен за използване“ до известна степен си противоречат на целите. Хранилищата са много по-удобни от шаблоните, но последните, разбира се, ви дават по-фин контрол върху това какво да изпълнявате.
Тъй като моделът за програмиране на хранилището е наличен за множество модули на Spring Data, ще намерите по-задълбочена документация за него в общия раздел на справочните документи на Spring Data MongoDB.
TL;DR
Обикновено препоръчваме следния подход:
- Започнете с резюмето на хранилището и просто декларирайте прости заявки с помощта на механизма за извличане на заявки или ръчно дефинирани заявки.
- За по-сложни заявки добавете ръчно внедрени методи към хранилището (както е документирано тук). За внедряването използвайте
MongoTemplate
.
Подробности
За вашия пример това би изглеждало така:
-
Дефинирайте интерфейс за вашия персонализиран код:
interface CustomUserRepository { List<User> yourCustomMethod(); }
-
Добавете реализация за този клас и следвайте конвенцията за именуване, за да сме сигурни, че можем да намерим класа.
class UserRepositoryImpl implements CustomUserRepository { private final MongoOperations operations; @Autowired public UserRepositoryImpl(MongoOperations operations) { Assert.notNull(operations, "MongoOperations must not be null!"); this.operations = operations; } public List<User> yourCustomMethod() { // custom implementation here } }
-
Сега оставете вашия базов интерфейс на хранилище да разшири персонализирания и инфраструктурата автоматично ще използва вашата персонализирана реализация:
interface UserRepository extends CrudRepository<User, Long>, CustomUserRepository { }
По този начин по същество получавате избор:всичко, което просто е лесно за деклариране, отива в UserRepository
, всичко, което е по-добре внедрено ръчно, отива в CustomUserRepository
. Опциите за персонализиране са документирани тук.