Skip to content

Instantly share code, notes, and snippets.

@hrdmtr
Created October 31, 2012 01:49
Show Gist options
  • Save hrdmtr/3984336 to your computer and use it in GitHub Desktop.
Save hrdmtr/3984336 to your computer and use it in GitHub Desktop.
Morphiaを使ってmongodbに接続

Javaでmongodbを使う

MongoDBはスキーマレスなので、 RDBのようにデータモデルがガチガチに固まったデータベースとは違った新しい使い方ができそう。 スキーマレスということは、ORマッパーとか、静的型付け言語とは、 "ソリが合わない"んだろうなとは予想できる。

・・・が、Java-RDBで開発したことのある方なら、 ORマッパー的な使い方があったらとっつきやすいと思う。

そんなわけで、JavaでMorphia経由でCRUD的なことをする場合のメモ

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>mongodbsample</groupId>
  <artifactId>mongodbsample</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <dependencies>
    <dependency>
        <groupId>com.github.jmkgreen.morphia</groupId>
        <artifactId>morphia</artifactId>
        <version>1.0</version>
    </dependency>
  </dependencies>
</project>

データの操作(CRUD)

準備

@Entity
public class Person {
  @Id public  ObjectId oid;
  public long personid;
  public String name;
}

データの追加

  Datastore ds = new Morphia().createDatastore(new Mongo("localhost"), "myDB");
  Person p = new Person();
  p.personid = 12;
  p.name = "ff";
  ds.save(p);

結果

> show dbs
local   (empty)
myDB    0.0625GB
test    (empty)
> use myDB
switched to db myDB
> db.Person.find();
{ "_id" : ObjectId("5090879e447d565970f2bd7f"), "className" : "model.Person", "personid" : NumberLong(12), "name" : "ff" }

※Morphiaで追加すると必ず"className"フィールドができて、エンティティクラス名が設定される模様。

データの取得

  Datastore ds = new Morphia().createDatastore(new Mongo("localhost"), "myDB");
  Query<Person> persons = ds.find(Person.class);
  for (Person person : persons.asList()) {
    System.out.println("oid      :" + person.oid);
    System.out.println("personid :" + person.personid);
    System.out.println("name     :" + person.name);
  }

結果

oid      :5090879e447d565970f2bd7f
personid :12
name     :ff
oid      :509090f4447db79527a4341a
personid :13
name     :fff

データの更新

  Datastore ds = new Morphia().createDatastore(new Mongo("localhost"), "myDB");
  Query<Person> persons = ds.find(Person.class);
  for (Person person : persons.asList()) {
    person.name = person.name + "_1";
  }
  ds.save(querys);

結果

> db.Person.find();
{ "_id" : ObjectId("5090879e447d565970f2bd7f"), "className" : "model.Person", "personid" : NumberLong(12), "name" : "ff_1" }
{ "_id" : ObjectId("509090f4447db79527a4341a"), "className" : "model.Person", "personid" : NumberLong(13), "name" : "fff_1" }
>

データの削除

  Datastore ds = new Morphia().createDatastore(new Mongo("localhost"), "myDB");
  Query<Person> persons = ds.find(Person.class);
  ds.delete(persons);

結果

> db.Person.count()
0
>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment