"Bekvem" og "kraftig at bruge" er i en vis grad modstridende mål. Lagre er langt mere bekvemme end skabeloner, men sidstnævnte giver dig naturligvis mere finmasket kontrol over, hvad du skal udføre.
Da repository-programmeringsmodellen er tilgængelig for flere Spring Data-moduler, finder du mere dybdegående dokumentation for den i det generelle afsnit af Spring Data MongoDB-referencedokumenterne.
TL;DR
Vi anbefaler generelt følgende fremgangsmåde:
- Start med repository-abstraktet og erklær bare simple forespørgsler ved hjælp af forespørgselsafledningsmekanismen eller manuelt definerede forespørgsler.
- For mere komplekse forespørgsler skal du tilføje manuelt implementerede metoder til lageret (som dokumenteret her). Brug
MongoTemplate
til implementeringen .
Detaljer
For dit eksempel ville dette se sådan ud:
-
Definer en grænseflade til din brugerdefinerede kode:
interface CustomUserRepository { List<User> yourCustomMethod(); }
-
Tilføj en implementering for denne klasse, og følg navnekonventionen for at sikre, at vi kan finde 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 } }
-
Lad nu din basislagergrænseflade udvide den brugerdefinerede, og infrastrukturen vil automatisk bruge din tilpassede implementering:
interface UserRepository extends CrudRepository<User, Long>, CustomUserRepository { }
På denne måde får du i det væsentlige valget:alt, hvad der bare er nemt at erklære, går ind i UserRepository
, alt, hvad der er bedre implementeret manuelt, går ind i CustomUserRepository
. Tilpasningsmulighederne er dokumenteret her.