SpringData MongoDB紹介(一)-入門

6870 ワード

SpringData MongoDB紹介(一)-入門
本文ではSpringData MongoDBの操作エンティティとデータベースの使い方を紹介します.本文では最も基本的な例を紹介します.複雑な例は後の文章で紹介します.
SpringData MongoDB概要
SpringData MongoDBはspring dataのサブプロジェクトで、MongoDBに対する操作をパッケージ化するために使われていますが、現在の最新バージョンは1.6.1です.(2015年1月18日まで)
The Spring Data MongoDB project provides integration with the MongoDB document database.Key functional aras of Spring Data MongoDB ara POJO centric model for interacting with a MongoDB Collection andarewtions.
MongoDBは無関係データベースです.ここでは詳しく紹介しません.
SprigData MongoDBには以下の特徴があります.
  • Spring configration support using Java based@Configration clases or an XML namespace for a Mongo driver instance and replica sets.
  • MongoTemplate helper clast that increas productivity performing common Mongo operation.Includes integrated oject mapping between documents and POJOs.
  • Exception trnslation into Spring's potable Data Acception hierarch
  • Feature Rich Object Mapping integrated with Spring's Coversion Service
  • Annotation based mapping metadata but extensit to support other metadata formas
  • Persistence and mapping lifecycle events
  • Low-level mapping using MongoReader/MongoWriter abstractions
  • Java based Query,Criteria,and Update DSLs
  • Automatic implemention of Repository interfaces including support for custom finder methods.
  • Query DSL integration to support type-safe queries.
  • Cross-store persistance-support for JPA Entties with fields tranparently persisted/retrieved using MongoDB
  • Log 4 j logp apender
  • GeoSpate integration
  • Map-reeduce integration
  • JMX administration and monitoring
  • CDI support for repositories
  • GridFS support
  • 準備工作
    事前にmongodbデータベースをインストールする必要があります.ダウンロード
    サンプルコード
    エンティティクラス定義
    package com.chzhao.mongodbtest;
    
    import org.springframework.data.annotation.Id;
    
    public class Customer {
    	@Id
        private String id;
    
        public String getId() {
    		return id;
    	}
    
    	public void setId(String id) {
    		this.id = id;
    	}
    
    	public String getFirstName() {
    		return firstName;
    	}
    
    	public void setFirstName(String firstName) {
    		this.firstName = firstName;
    	}
    
    	public String getLastName() {
    		return lastName;
    	}
    
    	public void setLastName(String lastName) {
    		this.lastName = lastName;
    	}
    
    	private String firstName;
        private String lastName;
    
        public Customer() {}
    
        public Customer(String firstName, String lastName) {
            this.firstName = firstName;
            this.lastName = lastName;
        }
    
        @Override
        public String toString() {
            return String.format(
                    "Customer[id=%s, firstName='%s', lastName='%s']",
                    id, firstName, lastName);
        }
    }
    
    操作クラスの定義
    package com.chzhao.mongodbtest;
    
    import java.util.List;
    
    import org.springframework.data.mongodb.repository.MongoRepository;
    
    public interface CustomerRepository extends MongoRepository<Customer, String> {
    
    	public Customer findByFirstName(String firstName);
    
    	public List<Customer> findByLastName(String lastName);
    
    	public long deleteByFirstName(String firstName);
    
    	public long countByLastName(String lastName);
    }
    呼び出し方法
    package com.chzhao.mongodbtest;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.CommandLineRunner;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
    
    @EnableAutoConfiguration
    public class Application implements CommandLineRunner {
    
    	@Autowired
    	private CustomerRepository repository;
    
    	public static void main(String[] args) {
    		SpringApplication.run(Application.class, args);
    	}
    
    	public void run(String... args) throws Exception {
    
    		for (int i = 0; i < 10000; i++) {
    			repository.save(new Customer(i + "", "zhao"));
    		}
    		long cou = repository.countByLastName("zhao");
    		System.out.println(cou);
    
    		System.out.println("Customers found with findAll():");
    		System.out.println("-------------------------------");
    		for (Customer customer : repository.findAll()) {
    			System.out.println(customer);
    		}
    		System.out.println();
    		repository.deleteByFirstName("zhao");
    
    		// fetch an individual customer
    		System.out.println("Customer found with findByFirstName('Alice'):");
    		System.out.println("--------------------------------");
    		System.out.println(repository.findByFirstName("Alice"));
    
    		System.out.println("Customers found with findByLastName('Smith'):");
    		System.out.println("--------------------------------");
    		for (Customer customer : repository.findByLastName("zhao")) {
    			System.out.println(customer);
    		}
    
    	}
    
    }
    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>com.chzhao</groupId>
    	<artifactId>mongodbtest</artifactId>
    	<version>0.0.1-SNAPSHOT</version>
    	<packaging>jar</packaging>
    
    	<properties>
    		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    	</properties>
    
    	<dependencies>
    		<dependency>
    			<groupId>junit</groupId>
    			<artifactId>junit</artifactId>
    			<version>3.8.1</version>
    			<scope>test</scope>
    		</dependency>
    		<dependency>
    			<groupId>org.mongodb</groupId>
    			<artifactId>mongo-java-driver</artifactId>
    			<version>2.11.4</version>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework.data</groupId>
    			<artifactId>spring-data-mongodb</artifactId>
    			<version>1.6.1.RELEASE</version>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-data-mongodb</artifactId>
    			<version>1.1.10.RELEASE</version>
    		</dependency>
    
    	</dependencies>
    </project>
    
    参照
  • Spring Data MongoDB
  • Access Data with MongoDB
  • Spring Data MongoDB-Reference Dcumentation