sql >> データベース >  >> NoSQL >> MongoDB

Jacksonを使用したJavaMongoDBObjectとの間の効率的なPOJOマッピング

    Mixinアノテーションを使用して、POJOとBasicDBObjectにアノテーションを付けることができます。 (またはDBObject )、したがって、注釈は問題ではありません。 BasicDBOject以降 はマップです。@JsonAnySetterを使用できます putメソッドについて。

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

    MongoDB Objectの経験がまったくないので、これが私が思いつくことができるすべてです。

    更新: MixIn 基本的には、クラスを変更せずにクラスにアノテーションを追加するJacksonメカニズムです。これは、マーシャリングするクラスを制御できない場合(外部のjarからのものなど)、またはクラスをアノテーションで乱雑にしたくない場合に最適です。

    ここでのあなたのケースでは、BasicDBObject Mapを実装します そのため、クラスのメソッドはputになります。 、マップインターフェイスで定義されているとおり。 @JsonAnySetter<を追加する/ a> そのメソッドに対して、クラスのイントロスペクション後に知らないプロパティを見つけた場合は常に、メソッドを使用してプロパティをオブジェクトに挿入するようにジャクソンに指示します。キーはプロパティの名前であり、値はプロパティの値です。

    JacksonはBasicDBOjectに直接変換するため、これらすべてを組み合わせると、中間マップがなくなります。 そのクラスをJsonから逆シリアル化する方法を知っているからです。この構成では、次のことができます。

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

    私はMongoDBを使用していないため、これをテストしていないことに注意してください。そのため、いくつかの問題が発生する可能性があります。ただし、同様のユースケースで同じメカニズムを問題なく使用しました。クラスに応じてYMMV。



    1. Python+MongoDB-カーソルの反復が遅すぎる

    2. Mongodbは集約フレームワークで最後の組み合わせを取得します

    3. 開発ツールでのAPIエンドポイント保留中のリクエストの投稿

    4. javamongodb正規表現非文字文字