2011年12月15日木曜日

恥ずかしくて今さら聞けない、GMongo講座 2-

今日は、恥ずかしくて今さら聞けない、GMongo講座の第二回目を実施しようと思ったのですが、

ちょっと趣旨を変えています。

前々回述べた(かなぁ…)ように、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を使った人や、@GrabGradleを使った人の方が楽だったかもしれません。

私も依存性の解決には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 件のコメント:

コメントを投稿