mongodb javaオブジェクトを保存する3つの方法


mongodbはjavaオブジェクトを保存する3つの方法があり、1つはクラスによってDBObjectインタフェースを実現することであり、1つはspring-mongodbツールのオブジェクトマッピング機能を利用してjavaオブジェクトをmongodbのBSONドキュメントに変換することであり、1つはクラスインスタンスをシーケンス化し、バイナリストレージに変換することであり、mongodbはバイナリのデータフォーマットをサポートすることである.3つの方法を紹介します.
1.DBObjectインタフェースの実現
この方法ではクラスはDBObjectで、アクセス先の属性はputとgetの方法で、不便な感じがします.これは公式サイトの例を参考にすることができます.
public class Tweet implements DBObject {
    /* ... */
}

 
Tweet myTweet = new Tweet();
myTweet.put("user", userId);
myTweet.put("message", msg);
myTweet.put("date", new Date());

collection.insert(myTweet);
collection.setObjectClass(Tweet.class);

Tweet myTweet = (Tweet)collection.findOne();
Tweet myTweet = (Tweet)collection.findOne();
myTweet.put("message", newMsg);

collection.save(myTweet);

この方法は新しいクラスにのみ適用され,既存のクラスであれば適切ではないことが分かったかもしれない.
 
2.spring-mongodbの使用
Spring-mongodbオブジェクトマッピングの使用については、以前の記事:Mongodbとspring統合(2)------エンティティマッピングを参照してください.
Spring-mongodb永続化オブジェクトを使用するには、エンティティクラスのフィールドをバイナリで格納するのではなく、クラスのフィールドをフィールドのフォーマットとして格納するのはよくありません.クラスに他の閉じたクラスが属性として含まれている場合は、mongodbから読み出すときに多くの反射を経てエンティティクラスにマッピングされます.なぜこのようなニーズがあるのでしょうか.私はcasのticketストレージ端をmongodbに変えるときに必要です.jpaを提供するストレージ層があります.関係データベースにはバイナリデータを格納するためのLOBのタイプがあることを知っています.@LOBで直接表記すればいいと思います.spring-mongodbもバイナリストレージの注釈機能を追加すべきだと思います.時間があれば自分で実現します.
 
3.クラスインスタンスを直列化し、バイナリストレージに変換
次に、バイナリ・ストレージ・クラスを使用する方法について説明します.以下は、公式javaクライアント・オペレーションを使用します.
シリアルストレージ、主にObjectOutputStream:
DBObject dbo = new BasicDBObject();
    ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
    ObjectOutputStream out = new ObjectOutputStream(outputStream);
    out.writeObject(yourJavaObject);
    dbo.put("JavaObject", outputStream.toByteArray());
    out.close();
    outputStream.close();
    collection.insert(dbo);

 
逆シーケンス化読み出し、主にObjectInputStreamを使用します.
DBObject object = collection.findOne();
    byte[] javaObjectByte = (byte[]) object.get("JavaObject");
    InputStream inputStream = new ByteArrayInputStream(javaObjectByte);
    ObjectInputStream in = new ObjectInputStream(inputStream);
    JavaObject javaObject = (Service) in.readObject();
    in.close();
    inputStream.close();

 
参考資料:http://www.mongodb.org/display/DOCS/Java+-+Saving+Objects+Using+DBObject
本住所:http://blog.csdn.net/laigood12345/article/details/7556144