2

http://www.mongodb.org/display/DOCS/Java+-+Saving+Objects+Using+DBObject

このページは、MongoDB でのオブジェクトの保存と取得に関するものです。しかし、DBObject を実装した後、一連のメソッドをオーバーライドする必要があります。"myTweet.put("user", userId);" となるように PUT メソッドを実装する方法を知っている人はいますか? 働ける?

4

1 に答える 1

4

DBObjectを実装する代わりに、BasicDBObjectを拡張するだけです

class Tweet extends BasicDBObject {
  public Tweet() {
    super();
  }
  public Tweet(BasicDBObject base) {
    super();
    this.putAll(base);
  }
}

Tweet myTweet = new Tweet();
myTweet.put("user", userId);

BasicDBObjectはDBObjectを実装するので、それを拡張するクラスは、 を実装するクラスを期待する任意の関数に渡すことができますDBObject。インターフェースを実装したい場合は、つぶやきの属性を保存するコンテナ クラスを提供する必要があります。 BasicDBObject は、 sourceBasicBSONObjectで確認できる別のクラスを拡張することでこれを行います。単純な実装は次のようになります。

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

import org.bson.BSONObject;

import com.mongodb.DBObject;


public class Tweet implements DBObject {
    private Map<String, Object> data;
    private boolean partial;

    public Tweet() {
        data = new HashMap<>();
        partial = false;
    }

    @Override
    public Object put(String key, Object value) {
        return data.put(key, value);
    }

    @SuppressWarnings("unchecked")
    @Override
    public void putAll(BSONObject o) {
        data.putAll(o.toMap());
    }

    @SuppressWarnings({ "rawtypes", "unchecked" })
    @Override
    public void putAll(Map m) {
        data.putAll(m);
    }

    @Override
    public Object get(String key) {
        return data.get(key);
    }

    @SuppressWarnings("rawtypes")
    @Override
    public Map toMap() {
        return data;
    }

    @Override
    public Object removeField(String key) {
        return data.remove(key);
    }

    @Override
    public boolean containsKey(String key) {
        return data.containsKey(key);
    }

    @Override
    public boolean containsField(String key) {
        return data.containsKey(key);
    }

    @Override
    public Set<String> keySet() {
        return data.keySet();
    }

    @Override
    public void markAsPartialObject() {
        partial = true;
    }

    @Override
    public boolean isPartialObject() {
        return partial;
    }
}

このクラスは を実装し、DBObjectを使用してそのHashMapプロパティを格納します。

于 2012-11-27T05:48:48.407 に答える