ちょっと趣旨を変えています。
前々回述べた(かなぁ…)ように、GMongoは
mongo-java-driver
のthinラッパーで、Javaとの結びつきが容易なわけです。これはJavaとの親和性を保つという
Groovy
特有の思想になります。そこで、
GMongo
を使いつつ、前回程度のレベルをJavaでも実装してみるというのが今日の目的になります。題して、
恥ずかしくて今さら聞けない、GMongo講座 2- GMongoをつかってmongo-java-driverを勉強してみる
です。
dependency
前回ではライブラリーのダウンロードにはzipを落とせ的なことを書いたと思います。
で、実際にやってみた方はご存知のことだと思いますが、GMongo自体は
mongo-java-driver
のthinラッパーなので、mongo-java-driver
が依存ライブラリーになっています。その点で、
Maven
を使った人や、@Grab
、Gradle
を使った人の方が楽だったかもしれません。私も依存性の解決には
Maven
を用いており、下記のコードによって、mongo-java-driver
が入手できています。
<dependencies>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy</artifactId>
<version>1.8.4</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.gmongo</groupId>
<artifactId>gmongo</artifactId>
<version>0.9.2</version>
</dependency>
</dependencies>
こういう依存性の解決などには、
Maven
すごい役立ちますね。う〜ん、ゆとりとか関係なく、勉強したほうがよさそうですね…
では、
mongo-java-driver
を使ってmongodbを触っていきたいと思います。クライアント起動インスタンス化
ここには、
GMongo
を使っちゃいます。基本的には便利なものは便利なものを利用するというスタンスを取ります。
MongoTestJava.groovy
import com.gmongo.GMongo
import org.junit.Before
GMongo mongo;
@Before
public void setUp() {
mongo = new GMongo('localhost', 27017);
}
DBの選択とスキーマ取得
あっ、これも全然変わりませんw
MongoTestJava.groovy
import com.gmongo.GMongo;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import org.junit.Before
GMongo mongo;
DB db;
DBCollection items;
@Before
public void setUp() {
mongo = new GMongo("localhost", 27017);
db = mongo.getDB("mydb");
items = db.getCollection("items");
}
ちなみに、
com.mongodb.DB
com.mongodb.DBCollection
mongo-java-driver
ライブラリーに含まれるクラスです。レコードの作成
ここはJavaだと手順が増えます。
そこは型安全を是とするJavaだと仕方がない場面です。
MongoTestJava.groovy
import com.gmongo.GMongo;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBObject;
import com.mongodb.BasicDBObject;
import org.junit.Before
GMongo mongo;
DB db;
DBCollection items;
@Before
public void setUp() {
mongo = new GMongo("localhost", 27017);
db = mongo.getDB("mydb");
items = db.getCollection("items");
List<DBObject> list = createDbList();
}
private List<DBObject> createDbList() {
List<DBObject> list = new ArrayList<DBObject>();
for(int i = 0; i < 10; i++) {
BasicDBObject dbObject = new BasicDBObject();
dbObject.put("name", "data");
dbObject.put("value", 1);
list.add(dbObject);
}
return list;
}
この
com.mongodb.BasicDBObject
というクラスはjava.util.LinkedHashMap<String, Object>
を継承しているクラスで、これがJSONデータを表します。com.mongodb.BasicDBObject#toString()
というメソッドでは、JSON形式に変換された文字列が返されます。一度試してみましょう。
@Test
public void testJson() {
List<Integer> list = new ArrayList<Integer>();
for(int i = 0; i < 10; i++) {
list.add(i);
}
DBObject object = new BasicDBObject();
object.put("data", "value");
DBObject dbObject = new BasicDBObject();
dbObject.put("numero", 1);
dbObject.put("bool", false);
dbObject.put("nil", null);
dbObject.put("key", "KeyString");
dbObject.put("ArrayData", list);
dbObject.put("objectData", object);
System.out.println(dbObject.toString());
assertThat(dbObject.toString().contains("null"), is(true));
assertThat(dbObject.toString().contains(" : {"), is(true));
assertThat(dbObject.toString().contains(" : ["), is(true));
}
結果はこんな感じです。
JSONになっていますね。
また、JSON内にJSONオブジェクトも生成できています。
レコードの登録
残すところは
insert
です。これは次になります。
MongoTestJava.groovy
import com.gmongo.GMongo;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBObject;
import com.mongodb.BasicDBObject;
import org.junit.Before
GMongo mongo;
DB db;
DBCollection items;
@Before
public void setUp() {
mongo = new GMongo("localhost", 27017);
db = mongo.getDB("mydb");
items = db.getCollection("items");
List<DBObject> list = createDbList();
items.insert(list);
}
@Test
public void testSetUp() {
assertThat(items.find().size(), is(10));
}
では、実際にテストしてみましょう。
見事通りました。
MongodbはJSONデータを扱うので、型の部分でやや面倒な所がありますが、Javaでも行けますね。
というわけで、次回はGMongoの本編です。
0 件のコメント:
コメントを投稿