sql >> Database >  >> NoSQL >> MongoDB

Hoe zie je de repository-implementatie gegenereerd door Spring Data MongoDB?

tl;dr

Nee, om een ​​heel eenvoudige reden:er wordt geen code gegenereerd. De implementatie is gebaseerd op proxy's en een methode-interceptor die de oproepuitvoeringen naar de juiste plaatsen delegeert.

Details

In feite kan de uitvoering van een methode worden ondersteund door 3 soorten code:

  1. De winkelspecifieke implementatie van CrudRepository . Zoek naar typen met de naam Simple(Jpa|Mongo|Neo4|…)Repository (zie de specifieke JPA hier ). Ze hebben "echte" implementaties voor alle methoden in CrudRepository en PagingAndSortingRepository .

  2. Query-methoden worden effectief uitgevoerd door QueryExecutorMethodInterceptor.doInvoke(…) (zie hier ). Het is in feite een proces van drie stappen om het delegatiedoel te vinden en aan te roepen. De daadwerkelijke uitvoering wordt gedaan in klassen met de naam (Jpa|Mongo|Neo4j…)QueryExecution (zie deze bijvoorbeeld).

  3. Aangepaste implementatiecode wordt rechtstreeks aangeroepen, ook vanuit QueryExecutorMethodInterceptor .

Het enige dat overblijft is de afleiding van de query, die uit twee hoofdonderdelen bestaat:het ontleden van de methodenaam en het maken van de query. Kijk voor de eerste eens op PartTree . Het heeft een methodenaam en een basistype nodig en geeft een geparseerde AST-achtige structuur terug of genereert een uitzondering als het niet lukt om eigenschappen of iets dergelijks op te lossen.

Dit laatste wordt geïmplementeerd in klassen met de naam PartTree(Jpa|Mongo|Neo4j|…)Query en delegeert naar aanvullende componenten voor het daadwerkelijk maken van de winkelspecifieke query. bijv. voor JPA staan ​​de interessante bits waarschijnlijk in JpaQueryCreator.PredicateBuilder.build() (zie hier ).




  1. krijg mongodb _id object na upsert met php

  2. Noodzaak om decimale waarden met hoge precisie op te slaan in MongoDB

  3. Aangepaste MongoDb docker-afbeelding

  4. Bereken de skip-waarde voor een bepaald record voor gesorteerde paging