sql >> Databáze >  >> NoSQL >> MongoDB

Jak vidět implementaci úložiště generovanou Spring Data MongoDB?

tl;dr

Ne, z velmi jednoduchého důvodu:neprobíhá žádné generování kódu. Implementace je založena na proxy a metodovém zachycovači, který deleguje provádění hovorů na správná místa.

Podrobnosti

Spuštění metody může být efektivně podpořeno 3 typy kódu:

  1. Implementace CrudRepository specifická pro obchod . Podívejte se na typy s názvem Simple(Jpa|Mongo|Neo4|…)Repository (viz konkrétní JPA zde ). Mají "skutečné" implementace pro všechny metody v CrudRepository a PagingAndSortingRepository .

  2. Metody dotazů efektivně spouští QueryExecutorMethodInterceptor.doInvoke(…) (viz zde ). Je to v podstatě 3-krokový proces k nalezení cíle delegování a jeho vyvolání. Vlastní spuštění se provádí ve třídách s názvem (Jpa|Mongo|Neo4j…)QueryExecution (viz například tento).

  3. Vlastní implementační kód je volán přímo, také z QueryExecutorMethodInterceptor .

Zbývá pouze odvození dotazu, které se skládá ze dvou hlavních částí:parsování názvu metody a vytvoření dotazu. V prvním případě se podívejte na PartTree . Vyžaduje název metody a základní typ a vrátí vám analyzovanou strukturu podobnou AST nebo vyvolá výjimku, pokud selže při vyřešení vlastností nebo podobně.

Ten je implementován ve třídách s názvem PartTree(Jpa|Mongo|Neo4j|…)Query a deleguje na další komponenty pro skutečné vytvoření dotazu specifického pro obchod. Např. pro JPA jsou zajímavé kousky pravděpodobně v JpaQueryCreator.PredicateBuilder.build() (viz zde ).




  1. Problémy s agregačním rámcem SailsJS &MongoDB s vlastními dotazy

  2. jak používat konfiguraci Spark-submit:sklenice, balíčky:v režimu clusteru?

  3. PyMongo a multiprocessing:ServerSelectionTimeoutError

  4. Spouštění více dotazů v mongo`