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

使用されるツールと技術:

  1. SpringデータMongoDB – 1.2.0.RELEASE

  2. スプリングコア – 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データには、JDK 6.0以上、Spring Framework 3.0.x以上が必要です。

1.プロジェクトの構成

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


SpringData-helloworld-example、width = 520、height = 376

2.依存関係

以下のライブラリが必要です:



spring-data-mongodb**

現在のところ、 “spring-data-mongodb” jarファイルは ”


http://maven.springframework.org/milestone


“でのみ利用可能ですので、このリポジトリも宣言する必要があります。**

  • 2012年13月9日更新** + `spring-data-mongodb`はMavenセントラルリポジトリで利用可能です。Springリポジトリはもはや必要ありません。

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/maven-v4__0__0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.mkyong.core</groupId>
    <artifactId>SpringMongoDBExample</artifactId>
    <packaging>jar</packaging>
    <version>1.0</version>
    <name>SpringMongoExample</name>
    <url>http://maven.apache.org</url>

    <dependencies>

        <!-- Spring framework -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>3.2.2.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>3.2.2.RELEASE</version>
        </dependency>

        <!-- mongodb java driver -->
        <dependency>
            <groupId>org.mongodb</groupId>
            <artifactId>mongo-java-driver</artifactId>
            <version>2.11.0</version>
        </dependency>

        <!-- Spring data mongodb -->
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-mongodb</artifactId>
            <version>1.2.0.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>cglib</groupId>
            <artifactId>cglib</artifactId>
            <version>2.2.2</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.0</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-eclipse-plugin</artifactId>
                <version>2.9</version>
                <configuration>
                    <downloadSources>true</downloadSources>
                    <downloadJavadocs>true</downloadJavadocs>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

3.春の設定、注釈、XML

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

注+この公式のリファレンスhttp://static.springsource.org/spring-data/data-mongodb/docs/current/reference/html/mongo.core.html#mongodb-connectors[SpringでMongoDBに接続]を参照してください。

  • 3.1 Annotation ** +

    AbstractMongoConfiguration`を拡張するのが最も速いので、

    mongoTemplate`オブジェクトのように、開始する必要があるすべてを設定するのに役立ちます。

SpringMongoConfig.java

package com.mkyong.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.mkyong.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スキーマ**

SpringConfig.xml

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mongo="http://www.springframework.org/schema/data/mongo"
    xsi:schemaLocation="http://www.springframework.org/schema/context
          http://www.springframework.org/schema/context/spring-context-3.0.xsd
          http://www.springframework.org/schema/data/mongo
          http://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd
          http://www.springframework.org/schema/beans
          http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

    <mongo:mongo host="127.0.0.1" port="27017"/>
    <mongo:db-factory dbname="yourdb"/>

    <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
        <constructor-arg name="mongoDbFactory" ref="mongoDbFactory"/>
    </bean>

</beans>

そしてそれをSpringの `GenericXmlApplicationContext`に含めてください:

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

  • XMLや注釈?** 実際には、どちらも同じことをしています。それは単に個人的な好みに基づいています。個人的には、私は物事を構成するXMLが好きです。

4.ユーザーモデル

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

User.java

package com.mkyong.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.mkyong.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.mkyong.config.SpringMongoConfig;
import com.mkyong.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("mkyong", "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("mkyong"));

   //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<User> listUser = mongoOperation.findAll(User.class);
    System.out.println("4. Number of user = " + listUser.size());

    }

}


出力

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

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

ダウンロードする –

SpringMongoDB-HelloWorld-Example.zip

(24 KB)