入門

作業環境のセットアップをブートストラップする簡単な方法は、start.spring.io 経由で Spring ベースのプロジェクトを作成するか、Pleiades All in One (JDK, STS, Lombok 付属) または Spring Tools (英語) で Spring プロジェクトを作成することです。

サンプルリポジトリ

GitHub spring-data-examples リポジトリ [GitHub] (英語) には、ライブラリがどのように機能するかを知るためにダウンロードして試してみることができるいくつかの例がホストされています。

Hello World

まず、実行中の MongoDB サーバーをセットアップする必要があります。MongoDB インスタンスの起動方法の説明については、MongoDB クイックスタートガイド (英語) を参照してください。インストールしたら、通常、次のコマンドを実行するだけで MongoDB を起動できます: /bin/mongod

次に、永続化する Person クラスを作成できます。

package org.springframework.data.mongodb.example;

public class Person {

	private String id;
	private String name;
	private int age;

	public Person(String name, int age) {
		this.name = name;
		this.age = age;
	}

	public String getId() {
		return id;
	}

	public String getName() {
		return name;
	}

	public int getAge() {
		return age;
	}

	@Override
	public String toString() {
		return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";
	}
}

実行するにはメインアプリケーションも必要です。

  • 命令的

  • リアクティブ

package org.springframework.data.mongodb.example;

import static org.springframework.data.mongodb.core.query.Criteria.*;

import org.springframework.data.mongodb.core.MongoOperations;
import org.springframework.data.mongodb.core.MongoTemplate;

import com.mongodb.client.MongoClients;

public class MongoApplication {

	public static void main(String[] args) throws Exception {

		MongoOperations mongoOps = new MongoTemplate(MongoClients.create(), "database");
		mongoOps.insert(new Person("Joe", 34));

		System.out.println(mongoOps.query(Person.class).matching(where("name").is("Joe")).firstValue());

		mongoOps.dropCollection("person");
	}
}
package org.springframework.data.mongodb.example;

import static org.springframework.data.mongodb.core.query.Criteria.*;

import org.springframework.data.mongodb.core.ReactiveMongoOperations;
import org.springframework.data.mongodb.core.ReactiveMongoTemplate;

import com.mongodb.reactivestreams.client.MongoClients;

public class ReactiveMongoApplication {

	public static void main(String[] args) throws Exception {

		ReactiveMongoOperations mongoOps = new ReactiveMongoTemplate(MongoClients.create(), "database");

		mongoOps.insert(new Person("Joe", 34))
			.then(mongoOps.query(Person.class).matching(where("name").is("Joe")).first())
			.doOnNext(System.out::println)
			.block();

		mongoOps.dropCollection("person").block();
	}
}

メインプログラムを実行すると、前述の例では次の出力が生成されます。

10:01:32,265 DEBUG o.s.data.mongodb.core.MongoTemplate - insert Document containing fields: [_class, age, name] in collection: Person
10:01:32,765 DEBUG o.s.data.mongodb.core.MongoTemplate - findOne using query: { "name" : "Joe"} in db.collection: database.Person
Person [id=4ddbba3c0be56b7e1b210166, name=Joe, age=34]
10:01:32,984 DEBUG o.s.data.mongodb.core.MongoTemplate - Dropped collection [database.person]

この単純な例でも、注意すべき点はほとんどありません。

  • 標準またはリアクティブ MongoClient オブジェクトと使用するデータベースの名前を使用して、Spring Mongo、MongoTemplate の主要ヘルパークラスをインスタンス化できます。

  • マッパーは、追加のメタデータを必要とせずに標準の POJO オブジェクトに対して機能します (ただし、オプションでその情報を提供することもできます。こちらを参照してください)。

  • id フィールドの処理には規則が使用され、データベースに格納されるときに ObjectId に変換されます。

  • マッピング規則では、フィールドアクセスを使用できます。Person クラスには getter しかありません。

  • コンストラクターの引数名が保存されたドキュメントのフィールド名と一致する場合、オブジェクトのインスタンス化に使用されます。