MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Jak zobaczyć implementację repozytorium wygenerowaną przez Spring Data MongoDB?

tl;dr

Nie, z bardzo prostego powodu:nie trwa generowanie kodu. Implementacja opiera się na serwerach proxy i interceptorze metod delegującym wykonania połączeń we właściwe miejsca.

Szczegóły

W efekcie wykonanie metody może być wspierane przez 3 rodzaje kodu:

  1. Specyficzna dla sklepu implementacja CrudRepository . Spójrz na typy o nazwie Simple(Jpa|Mongo|Neo4|…)Repository (zobacz konkretny JPA tutaj ). Mają "prawdziwe" implementacje dla wszystkich metod w CrudRepository i PagingAndSortingRepository .

  2. Metody zapytań są efektywnie wykonywane przez QueryExecutorMethodInterceptor.doInvoke(…) (patrz tutaj ). Jest to w zasadzie 3-etapowy proces, aby znaleźć cel delegowania i go wywołać. Rzeczywiste wykonanie odbywa się w klasach o nazwie (Jpa|Mongo|Neo4j…)QueryExecution (zobacz ten przykład).

  3. Niestandardowy kod implementacji jest wywoływany bezpośrednio, również z QueryExecutorMethodInterceptor .

Pozostało tylko wyprowadzenie zapytania, które składa się z dwóch głównych części:parsowania nazw metod i tworzenia zapytań. W przypadku tych pierwszych spójrz na PartTree . Pobiera nazwę metody i typ podstawowy i zwróci przeanalizowaną strukturę podobną do AST lub zgłosi wyjątek, jeśli nie uda się rozwiązać właściwości lub tym podobnych.

Ten ostatni jest zaimplementowany w klasach o nazwie PartTree(Jpa|Mongo|Neo4j|…)Query i delegaci do dodatkowych komponentów do rzeczywistego tworzenia zapytania specyficznego dla sklepu. Np. dla JPA interesujące bity są prawdopodobnie w JpaQueryCreator.PredicateBuilder.build() (patrz tutaj ).




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Porównanie dat w Mongodb ze sterownikiem C# LINQ

  2. Połącz i sformatuj tablicę obiektów w Pythonie

  3. APScheduler uruchamia funkcję asynchroniczną w Tornado Pythonie

  4. Jak uniknąć wyjątku Przedwcześnie osiągnął koniec strumienia przy użyciu sterownika Java mongoDB 3.4+ lub 3.6+? (podczas wkładania)

  5. Zalecany sposób na usunięcie obiektu w MongoDB na podstawie trasy