"Bekväm" och "kraftig att använda" är motstridiga mål till viss del. Förvar är mycket bekvämare än mallar, men de senare ger dig naturligtvis mer finkornig kontroll över vad du ska köra.
Eftersom förvarsprogrammeringsmodellen är tillgänglig för flera Spring Data-moduler, hittar du mer djupgående dokumentation för den i det allmänna avsnittet i Spring Data MongoDB-referensdokumenten.
TL;DR
Vi rekommenderar generellt följande tillvägagångssätt:
- Börja med repository-abstraktet och deklarera bara enkla frågor med hjälp av frågehärledningsmekanismen eller manuellt definierade frågor.
- För mer komplexa frågor, lägg till manuellt implementerade metoder till förvaret (som dokumenterats här). Använd
MongoTemplate
för implementeringen .
Detaljer
För ditt exempel skulle detta se ut ungefär så här:
-
Definiera ett gränssnitt för din anpassade kod:
interface CustomUserRepository { List<User> yourCustomMethod(); }
-
Lägg till en implementering för den här klassen och följ namnkonventionen för att se till att vi kan hitta klassen.
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 } }
-
Låt nu ditt baslagergränssnitt utöka det anpassade så kommer infrastrukturen automatiskt att använda din anpassade implementering:
interface UserRepository extends CrudRepository<User, Long>, CustomUserRepository { }
På så sätt får du i princip valet:allt som bara är lätt att deklarera hamnar i UserRepository
, allt som är bättre implementerat manuellt går in i CustomUserRepository
. Anpassningsalternativen dokumenteras här.