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

Wydajne mapowanie POJO do/z Java Mongo DBObject przy użyciu Jackson

Prawdopodobnie możesz użyć adnotacji Mixin, aby dodać adnotacje do swojego POJO i BasicDBObject (lub DBObject ), więc adnotacje nie stanowią problemu. Od BasicDBOject to mapa, możesz użyć @JsonAnySetter na metodzie put.

m_objectMapper.addMixInAnnotations(YourMixIn.class, BasicDBObject.class);

public interface YourMixIn.class {
    @JsonAnySetter
    void put(String key, Object value);
}

To wszystko, co mogę wymyślić, ponieważ nie mam żadnego doświadczenia z MongoDB Object.

Aktualizacja: MixIn są w zasadzie mechanizmem Jacksona do dodawania adnotacji do klasy bez modyfikowania tej klasy. Jest to idealne rozwiązanie, gdy nie masz kontroli nad klasą, którą chcesz zorganizować (np. gdy pochodzi z zewnętrznego słoika) lub gdy nie chcesz zaśmiecać swoich klas adnotacjami.

W twoim przypadku powiedziałeś, że BasicDBObject implementuje Map interfejs, dzięki czemu klasa ma metodę put , zgodnie z definicją interfejsu mapy. Dodając @JsonAnySetter do tej metody, mówisz Jacksonowi, że za każdym razem, gdy znajdzie właściwość, której nie zna po introspekcji klasy, użyje metody do wstawienia właściwości do obiektu. Kluczem jest nazwa własności, a wartością jest, cóż, wartość własności.

Wszystko to razem sprawia, że ​​mapa pośrednia znika, ponieważ Jackson bezpośrednio przekonwertuje na BasicDBOject ponieważ teraz wie, jak deserializować tę klasę z Json. Dzięki tej konfiguracji możesz wykonać:

DBObject dbo = m_objectMapper.convertValue(pojo, BasicDBObject.class);

Zauważ, że nie testowałem tego, ponieważ nie pracuję z MongoDB, więc mogą być pewne luźne końce. Jednak bez problemu użyłem tego samego mechanizmu w podobnych przypadkach. YMMV w zależności od klas.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. problemy z zapytaniem php7 mongo findOne

  2. Jak sortować i ograniczać wyniki w mongodb?

  3. explain() w Mongodb:różnice między nscanned i nscannedObjects

  4. Jak połączyć się z mongodb za pomocą sailsjs v0.10?

  5. Dodawanie wyników do agregacji MongoDB za pomocą $switch