Docs Menu
Docs Home
/ / /
Java 同期
/ /

ドキュメントのデータ形式: POJO

項目一覧

  • Overview
  • POJO の例
  • POJO のドライバーの設定
  • CRUD 操作を実行
  • 概要

このガイドでは、Plain Old Java Object(POJO)によってモデル化されたデータを保存および検索する方法を学習できます。POJO は、ビジネス ロジックをデータ表現から分離するデータ カプセル化によく使用されます。

Tip

POJO について詳しくは、Wikipedia で Plain old Java object に関する記事を参照してください。

このガイドの例では、次のタスクを実行する方法について説明しています。

  • POJO をシリアル化およびデシリアル化するようにドライバーを構成する

  • POJOでモデル化されたデータを使用してCRUD操作を実行する

このガイドのセクションでは、花の特性を説明する次のサンプル POJO クラスを使用します。

public class Flower {
private ObjectId id;
private String name;
private List<String> colors;
private Boolean isBlooming;
private Float height;
// public empty constructor needed for retrieving the POJO
public Flower() {
}
public Flower(String name, Boolean isBlooming, Float height, List<String> colors) {
this.name = name;
this.isBlooming = isBlooming;
this.height = height;
this.colors = colors;
}
public ObjectId getId() {
return id;
}
public void setId(ObjectId id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Boolean getIsBlooming() {
return isBlooming;
}
public void setIsBlooming(Boolean isBlooming) {
this.isBlooming = isBlooming;
}
public Float getHeight() {
return height;
}
public void setHeight(Float height) {
this.height = height;
}
public List<String> getColors() {
return colors;
}
public void setColors(List<String> colors) {
this.colors = colors;
}
@Override
public String toString() {
return "\nFlower {\n\tid: " + id + "\n\tname: " + name + "\n\tcolors: " + colors + "\n\tisBlooming: " + isBlooming + "\n\theight: " + height + "\n}";
}
}

MongoDB 内でデータを保存および検索するための POJO を定義する場合は、次のガイドラインに従います。

  • POJO クラスは、インターフェースを実装したり、フレームワークからクラスを拡張したりすることはできません。

  • データを保存および検索するすべてのフィールドを含め、それらが static または transient としてマークされていないことを確認します。

  • JavaBuild の命名規則 を使用して、公開 getter メソッドまたは setter メソッドを含める場合、 POJO では、ドライバーはデータをシリアル化または逆シリアル化するときにそれらを呼び出します。パブリック プロパティ フィールドの getter メソッドまたは setter メソッドを省略すると、ドライバーはそれらに直接アクセスするか、割り当てます。

POJO を使用するようにドライバーを構成するには、次のコンポーネントを指定する必要があります。

  • PojoCodecProvider インスタンス: POJO 形式と BSON 間でデータをエンコードおよびデコードする方法を定義するコーデックを持ち、 コーデックが適用される POJO クラスやパッケージを指定します。

  • CodecRegistry コーデックやその他の関連情報が含まれるインスタンス。

  • MongoDatabase インスタンス、または CodecRegistry インスタンス。MongoCollection を使用するために構成されたもの。

  • MongoCollection インスタンス。TDocument ジェネリック型にバインドされた POJO ドキュメント クラスを使用して作成されたもの。

前のセクションで定義された構成要件を満たすには、次の手順を実行します。

  1. PojoCodecProviderを設定します。この例では、PojoCodecProvider.Builderautomatic(true) 設定を使用して、コーデックを任意のクラスとそのプロパティに適用します。

    CodecProvider pojoCodecProvider = PojoCodecProvider.builder().automatic(true).build();

    注意

    コーデックClassModel Conventionプロバイダーには、シリアル化の動作をさらに定義する インスタンスや インスタンスなどの他のオブジェクトも含まれています。コーデックプロバイダとカスタマイズについて詳しくは、 POJO カスタマイズ のガイドを参照してください。

  2. PojoCodecProvider インスタンスを CodecRegistry に追加します。CodecRegistry を使用すると、POJO データをエンコードするための 1 つ以上のコーデック プロバイダーを指定できます。この例では、次のメソッドを呼び出します。

    • fromRegistries() 。複数の CodecRegistry インスタンスを 1 つのインスタンスにまとめるためのもの。

    • getDefaultCodecRegistry() コーデックプロバイダのリストから CodecRegistry インスタンスを検索する

    • fromProviders() PojoCodecProvider から CodecRegistry インスタンスを作成する

    次のコードは、CodecRegistry をインスタンス化する方法を示しています。

    // Include the following static imports before your class definition
    import static com.mongodb.MongoClientSettings.getDefaultCodecRegistry;
    import static org.bson.codecs.configuration.CodecRegistries.fromProviders;
    import static org.bson.codecs.configuration.CodecRegistries.fromRegistries;
    ...
    CodecRegistry pojoCodecRegistry = fromRegistries(getDefaultCodecRegistry(), fromProviders(pojoCodecProvider));
  3. CodecRegistry 内のコーデックを使用するように MongoDatabase または MongoCollection インスタンスを構成します。コーデックを指定するには、データベースまたはコレクションのいずれかを構成できます。

    この例では、withCodecRegistry() メソッドを使用して、sample_pojos と呼ばれる MongoDatabaseCodecRegistry を設定します。

    MongoClient mongoClient = MongoClients.create(uri);
    MongoDatabase database = mongoClient.getDatabase("sample_pojos").withCodecRegistry(pojoCodecRegistry);
  4. 次のコードに示すように、POJO クラスをドキュメント クラス パラメーターとして getCollection() の呼び出しに渡し、それを MongoCollection インスタンスの型引数として指定します。

    MongoCollection<Flower> collection = database.getCollection("flowers", Flower.class);

Flower POJO を使用するように MongoCollection インスタンスを構成すると、POJO によってモデル化されたデータに対して CRUD 操作を実行できます。

この例では、Flower POJO を使用して次の操作を実行する方法を示します。

  • Flower のインスタンスを flowers コレクションに挿入します

  • コレクション内のドキュメントを更新する

  • コレクション内のドキュメントを削除する

  • コレクション内のすべてのドキュメントを検索して印刷する

// Insert three Flower instances
Flower roseFlower = new Flower("rose", false, 25.4f, Arrays.asList(new String[] {"red", "pink"}));
Flower daisyFlower = new Flower("daisy", true, 21.1f, Arrays.asList(new String[] {"purple", "white"}));
Flower peonyFlower = new Flower("peony", false, 19.2f, Arrays.asList(new String[] {"red", "green"}));
collection.insertMany(Arrays.asList(roseFlower, daisyFlower, peonyFlower));
// Update a document
collection.updateOne(
Filters.lte("height", 22),
Updates.addToSet("colors", "pink")
);
// Delete a document
collection.deleteOne(Filters.eq("name", "rose"));
// Return and print all documents in the collection
List<Flower> flowers = new ArrayList<>();
collection.find().into(flowers);
System.out.println(flowers);

この例では、次の出力が印刷されます。

[
Flower {
id: 65b178ffa38ac42044ca1573
name: daisy
colors: [purple, white, pink]
isBlooming: true
height: 21.1
},
Flower {
id: 65b178ffa38ac42044ca1574
name: peony
colors: [red, green]
isBlooming: false
height: 19.2
}]

注意

デフォルトでは、 PojoCodecProviderは POJO 内のnullに設定されているフィールドを省略します。 この動作を指定する方法について詳しくは、 POJO カスタマイズのガイドを参照してください。

このセクションで説明されるメソッドとクラスの詳細については、次の API ドキュメントを参照してください。

このガイドでは、次のタスクを実行して、BSON と POJO 形式間でデータを変換する方法について説明します。

  • BSON と POJO フィールド間でデータをエンコードおよびデコードする方法を定義するコーデックを含む PojoCodecProvider をインスタンス化します。

  • PojoCodecProvider自動 変換動作を指定して、Codecs を任意のクラスとそのプロパティに適用します。

  • PojoCodecProviderCodecRegistry に追加し、MongoDatabase または MongoCollection のインスタンスのレジストリを指定します。

  • サンプル POJO クラスを使用する CRUD 操作を実行します。

戻る

ドキュメント