CodeZine(コードジン)

特集ページ一覧

Spring Dataを利用したMongoDBの操作

Spring Dataで始めるMongoDB 第2回

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2013/03/18 14:00

目次

ドキュメントの削除

 ドキュメントの削除は非常に簡単です。削除対象のドキュメントを表すオブジェクトを指定して削除することも可能ですが、今回は条件にマッチするドキュメントを削除する方法を紹介します。

RemoveSample.java
public class RemoveSample {
    public static void main(String[] args) {
        ApplicationContext ctx = new AnnotationConfigApplicationContext(AppConfig.class);
        MongoTemplate mongoTemplate = ctx.getBean(MongoTemplate.class);
        
        mongoTemplate.remove(new Query(Criteria.where("name").is("Scott")),Person.class);
    }
}

 条件の指定の仕方はfindやupdateMulti等の実行時と同じです。削除条件を組み立てたQueryクラスを引数として指定した上でremoveメソッドを実行します。

リポジトリの利用

 これまでの内容で、Spring Data MongoDBを利用してMongoDBに対する基本的な処理は行えるようになりました。MongoTemplateには、これまでに紹介したもの以外にも多数のメソッドが存在します。このMongoTemplateだけでもMongoDBを利用したアプリケーションの開発は行えますが、データストアの直接的な操作手段を提供するMongoTemplateは低レベルなAPIということもできます。

 Spring Data MongoDBは、ドメイン駆動開発におけるリポジトリがサポートされています。そこでさらに一歩進めて、リポジトリによるデータアクセスを行う例を最後に解説します。まず、リポジトリを利用するため以下のようなコンフィグレーションクラスを用意します。

AppConfig.java
@Configuration
@EnableMongoRepositories
public class AppConfig extends AbstractMongoConfiguration{
    
    @Bean 
    public Mongo mongo() throws UnknownHostException  {
        Mongo mongo = new Mongo("localhost");
        return mongo;
    }

    @Override
    protected String getDatabaseName() {
        return "example";
    }
    
    @Override
    protected String getMappingBasePackage(){
        return "org.sample.mongodb.repository";
    }
}

 次に、あらかじめ用意されているMongoRepositoryのサブインターフェースを用意します。

PersonRepository.java
import org.springframework.data.mongodb.repository.MongoRepository;

public interface PersonRepository extends MongoRepository<Person, String>{

}

 ジェネリック型には検索等の対象となる型とidの型を指定します。今回利用しているPersonクラスではidをString型で定義しているため、ここではStringを指定しています。

 最後に実行クラスを用意します。今回は簡単に全件検索を行ってみます。

FindAllRepositorySample.java
public class FindAllRepsitorySample {
    public static void main(String[] args){
        ApplicationContext ctx = new AnnotationConfigApplicationContext(AppConfig.class);
        PersonRepository personRepository = ctx.getBean(PersonRepository.class);
        List<Person> persons = personRepository.findAll();
        for(Person person : persons){
            System.out.println("id : " + person.getId());
            System.out.println("name : " + person.getName());
            System.out.println("age : " + person.getAge());
        }
    }
}

 MongoTemplateを利用する場合との違いは、MongoTemplateのBeanを取得する代わりにPersonRepositoryを取得している点です。検索等の処理はPersonRepositoryを介して行います。MongoRepositoryを利用したサブインターフェースを用意することで、基本的なMongoDBのオペレーションに関するメソッドの実装が自動で提供されます。また、命名規則に則ったfindメソッドを用意することで、その実装は自動で用意されます

 サンプルとして、"age"の値が指定した数値より少ないドキュメントを検索するメソッドを定義してみます。

PersonRepository.java(変更後)
public interface PersonRepository extends MongoRepository<Person, String>{
    List<Person> findByAgeLessThan(int age);
}

 上記のように命名規則に則ったメソッドを定義するだけで、自分で実装する必要がありません。このようにリポジトリを利用することで、定型的なコーディングが不要になるというメリットがあります。

 その他の規則や使用可能なキーワードは、公式ドキュメントの6.3章、表6.1に記載されていますのでご確認ください。

まとめ

 駆け足とはなりましたが、全2回でMongoDBの基本からSpring Data MongoDBというフレームワークを利用した、Javaプログラムからのアクセス方法について解説をしてきました。

 Spring Dataを利用することで、比較的簡単にMongoDBを利用したアプリケーション開発が行えるのではないでしょうか。Spring Data MongoDBには本稿で言及できなかった機能、オプションなどが存在します。また、現在も非常に活発に開発が続けられており、比較的短い頻度で新バージョンがリリースされていますので、興味を持った方はぜひ利用してみてください。



  • LINEで送る
  • このエントリーをはてなブックマークに追加

バックナンバー

連載:Spring Dataで始めるMongoDB

著者プロフィール

  • 西谷 圭介(ニシタニ ケイスケ)

    TIS株式会社所属。金融系基幹システムの開発等に従事したのち、サービス企画・開発を担当。IaaS開発を経て、現在はアプリ開発者のためのPaaS「eXcale」の開発責任者兼プログラマとして活動中。 Twitter:@Keisuke69 eXcale:http://www.excale.net...

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5