SpringデータMongoDB hello worldの例

Spring Data MongoDB Hello Worldの例

このチュートリアルでは、「http://www.springsource.org/spring-data/mongodb[SpringData for MongoDB]」フレームワークを使用して、SpringのアノテーションとXMLスキーマを介してMongoDBでCRUD操作を実行する方法を示します。

Updated on 1/04/2013
記事は、最新のSpringData v1.2.0.RELEASEを使用するように更新されました。v1.0.0.M2でした。

使用されるツールとテクノロジー:

  1. Spring Data MongoDB – 1.2.0.RELEASE

  2. Spring Core – 3.2.2.RELEASE

  3. Java Mongo Driver – 2.11.0

  4. Eclipse – 4.2

  5. JDK – 1.6

  6. Maven – 3.0.3

P.S Spring Data requires JDK 6.0 and above, and Spring Framework 3.0.x and above.

1. プロジェクト構造

古典的なMavenスタイルのJavaプロジェクトディレクトリ構造。

SpringData-helloworld-example

2. 依存

次のライブラリが必要です。

*spring-data-mongodb
現在、「spring-data-mongodb」jarは「http://maven.springframework.org/milestone」でのみ使用できるため、このリポジトリも宣言する必要があります。*

Updated on 13/09/2012
spring-data-mongodbはMaven中央リポジトリで利用可能です。Springリポジトリは不要になりました。

pom.xml


    4.0.0
    com.example.core
    SpringMongoDBExample
    jar
    1.0
    SpringMongoExample
    http://maven.apache.org

    

        
        
            org.springframework
            spring-core
            3.2.2.RELEASE
        

        
            org.springframework
            spring-context
            3.2.2.RELEASE
        

        
        
            org.mongodb
            mongo-java-driver
            2.11.0
        

        
        
            org.springframework.data
            spring-data-mongodb
            1.2.0.RELEASE
        

        
            cglib
            cglib
            2.2.2
        

    

    
        
            
                maven-compiler-plugin
                3.0
                
                    1.6
                    1.6
                
            
            
                org.apache.maven.plugins
                maven-eclipse-plugin
                2.9
                
                    true
                    true
                
            
        
    

3. Springの構成、注釈、およびXML

ここでは、注釈とXMLスキーマを介して、Springデータを構成し、MongoDBに接続する2つの方法を示します。


この公式リファレンスConnecting to MongoDB with Springを参照してください。

3.1 Annotation
AbstractMongoConfigurationを拡張するのが最速の方法であり、mongoTemplateオブジェクトなど、開始する必要があるすべてのものを構成するのに役立ちます。

SpringMongoConfig.java

package com.example.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.config.AbstractMongoConfiguration;

import com.mongodb.Mongo;
import com.mongodb.MongoClient;

@Configuration
public class SpringMongoConfig extends AbstractMongoConfiguration {

    @Override
    public String getDatabaseName() {
        return "yourdb";
    }

    @Override
    @Bean
    public Mongo mongo() throws Exception {
        return new MongoClient("127.0.0.1");
    }
}

代わりに、私はこれを好み、すべてをより柔軟に構成します。

SpringMongoConfig1.java

package com.example.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.MongoDbFactory;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.SimpleMongoDbFactory;

import com.mongodb.MongoClient;

@Configuration
public class SpringMongoConfig1 {

    public @Bean
    MongoDbFactory mongoDbFactory() throws Exception {
        return new SimpleMongoDbFactory(new MongoClient(), "yourdb");
    }

    public @Bean
    MongoTemplate mongoTemplate() throws Exception {

        MongoTemplate mongoTemplate = new MongoTemplate(mongoDbFactory());

        return mongoTemplate;

    }

}

そして、AnnotationConfigApplicationContextでロードします:

    ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringMongoConfig.class);
    MongoOperations mongoOperation = (MongoOperations)ctx.getBean("mongoTemplate");

3.2 XML Schema

SpringConfig.xml



    
    

    
        
    

そして、それをSpringのGenericXmlApplicationContextに含めます。

   ApplicationContext ctx = new GenericXmlApplicationContext("SpringConfig.xml");
   MongoOperations mongoOperation = (MongoOperations)ctx.getBean("mongoTemplate");

So, XML or Annotation?
実際、どちらも同じことをしています。それは個人的な好みに基づいています。 個人的には、XMLが物事を構成するのが好きです。

4. ユーザーモデル

@Documentアノテーションが付けられたUserオブジェクト–保存するコレクション。 後で、Springデータを使用して、このオブジェクトをMongoDBにバインドする方法を示します。

User.java

package com.example.model;

import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;

@Document(collection = "users")
public class User {

    @Id
    private String id;

    String username;

    String password;

    //getter, setter, toString, Constructors

}

5. デモ-CRUD操作

Springデータを使用してMongoDBでCRUD操作を実行する方法を示す完全な例。 SpringデータAPIは非常にクリーンで、一目瞭然です。

App.java

package com.example.core;

import java.util.List;

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.data.mongodb.core.MongoOperations;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;

import com.example.config.SpringMongoConfig;
import com.example.model.User;
//import org.springframework.context.support.GenericXmlApplicationContext;

public class App {

    public static void main(String[] args) {

    // For XML
    //ApplicationContext ctx = new GenericXmlApplicationContext("SpringConfig.xml");

    // For Annotation
    ApplicationContext ctx =
             new AnnotationConfigApplicationContext(SpringMongoConfig.class);
    MongoOperations mongoOperation = (MongoOperations) ctx.getBean("mongoTemplate");

    User user = new User("example", "password123");

    // save
    mongoOperation.save(user);

    // now user object got the created id.
    System.out.println("1. user : " + user);

    // query to search user
    Query searchUserQuery = new Query(Criteria.where("username").is("example"));

    // find the saved user again.
    User savedUser = mongoOperation.findOne(searchUserQuery, User.class);
    System.out.println("2. find - savedUser : " + savedUser);

    // update password
    mongoOperation.updateFirst(searchUserQuery,
                         Update.update("password", "new password"),User.class);

    // find the updated user object
    User updatedUser = mongoOperation.findOne(searchUserQuery, User.class);

    System.out.println("3. updatedUser : " + updatedUser);

    // delete
    mongoOperation.remove(searchUserQuery, User.class);

    // List, it should be empty now.
    List listUser = mongoOperation.findAll(User.class);
    System.out.println("4. Number of user = " + listUser.size());

    }

}

出力

1. user : User [id=516627653004953049d9ddf0, username=example, password=password123]
2. find - savedUser : User [id=516627653004953049d9ddf0, username=example, password=password123]
3. updatedUser : User [id=516627653004953049d9ddf0, username=example, password=new password]
4. Number of user = 0

ソースコードをダウンロード

ダウンロード–SpringMongoDB-HelloWorld-Example.zip(24 KB)