MongoDB Spring集成Mongo

MongoDB 是一个可扩展的、高性能的、开源的NoSQL数据库,跟传统的数据库不一样,MongoDB并不是将数据存储在表中,他将数据结构化为一个类似于JSON的文档中。这篇文章就是展示如何使用Java基于MongoDB和Spring Data创建一个CRUD应用。

Spring Data for MongoDB

Spring Data for MongoDB提供了一个类似于基于Sping编程模型的NoSQL数据存储。Spring Data for MongoDB提供了很多特性,它使很多MongoDB的Java开发者解放了很多。MongoTemplate helper类支持通用的Mongo操作。它整合了文档和POJO之间的对象映射。通常,他会转换数据库访问异常到Spring中的异常结构。使用起来非常的方便。

这里用到的是spring-data中一个集成mongodb的项目,首先在maven中添加对它的依赖

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

Spring Data创建一个应用

1、使用@Document注解指明一个领域对象将被持久化到MongoDB中。@Id注解identifies

package com.spring.momgo;

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

/**
 * @author LiangGe
 * @Document - 把一个java类声明为mongodb的文档
 */
@Document
public class Tree {

	@Id
	private String id;

	private String name;

	private String category;

	private int age;

	public Tree(String id, String name, int age) {
		this.id = id;
		this.name = name;
		this.age = age;
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getCategory() {
		return category;
	}

	public void setCategory(String category) {
		this.category = category;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	@Override
	public String toString() {
		return "Person [id=" + id + ", name=" + name + ", age=" + age
				+ ", category=" + category + "]";
	}
}


2、创建一个简单的接口。创建一个简单的接口,这个接口带有CRUD方法。这里我还带有createCollection方法和dropCollection方法

package com.spring.momgo;

import java.util.List;

import com.mongodb.WriteResult;

public interface Repository {

	public List getAllObjects();

	public void saveObject(T object);

	public T getObject(String id);

	public WriteResult updateObject(String id, String name);

	public void deleteObject(String id);

	public void createCollection();

	public void dropCollection();
}

3、 创建一个指定的领域对象CRUD的实现

package com.spring.momgo;

import java.util.List;

import org.springframework.data.mongodb.core.MongoTemplate;
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.mongodb.WriteResult;

public class TreeManRepositoryImpl implements Repository{
	
	MongoTemplate mongoTemplate;

	public void setMongoTemplate(MongoTemplate mongoTemplate) {
		this.mongoTemplate = mongoTemplate;
	}
	
	@Override
	public List getAllObjects() {
		// TODO Auto-generated method stub
		return mongoTemplate.findAll(TreeMan.class);
	}

	@Override
	public void saveObject(TreeMan treeMan) {
		// TODO Auto-generated method stub
		mongoTemplate.insert(treeMan);
	}

	@Override
	public TreeMan getObject(String id) {
		// TODO Auto-generated method stub
		return mongoTemplate.findOne(new Query(Criteria.where("id").is(id)),
				TreeMan.class);
	}

	@Override
	public WriteResult updateObject(String id, String name) {
		// TODO Auto-generated method stub
		return mongoTemplate.updateFirst(
				new Query(Criteria.where("id").is(id)),
				Update.update("name", name), TreeMan.class);
	}

	@Override
	public void deleteObject(String id) {
		// TODO Auto-generated method stub
		mongoTemplate
		.remove(new Query(Criteria.where("id").is(id)), TreeMan.class);
	}

	@Override
	public void createCollection() {
		// TODO Auto-generated method stub
		if (!mongoTemplate.collectionExists(TreeMan.class)) {
			mongoTemplate.createCollection(TreeMan.class);
		}
	}

	@Override
	public void dropCollection() {
		// TODO Auto-generated method stub
		if (mongoTemplate.collectionExists(TreeMan.class)) {
			mongoTemplate.dropCollection(TreeMan.class);
		}
	}
		
}

4、 创建Spring context。将所有spring beans和mongodb对象都声明在Spring context文件中,这里创建的是spring-mongo.xml文件。注意到我们并没有创建一个叫做"springmongo"的数据库。在第一次存储数据的时候MongoDB将会为我们创建这个数据库




    
	
	
	
	
		
		
	
	
	
	
	
		
		
	
	
	
		
	
	
	
		
	

	
	
		
	

5、 创建一个测试类。这里创建了一个测试类,并通过ClassPathXmlApplicationContext来初始化

package com.spring.momgo;

import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MongoTest {

	public static void main(String[] args) {

		ConfigurableApplicationContext context = new ClassPathXmlApplicationContext(
				"spring-mongo.xml");
		// getBean(),NatureRepositoryImpl instance
		Repository repository = context.getBean(TreeRepositoryImpl.class);

		// cleanup collection before insertion
		repository.dropCollection();

		// create collection
		repository.createCollection();
		// save apple tree doc
		repository.saveObject(new Tree("1", "Apple Tree", 5));

		System.out.println("1. " + repository.getAllObjects());

		repository.saveObject(new Tree("2", "Orange Tree", 3));

		System.out.println("2. " + repository.getAllObjects());

		System.out.println("Tree with id 1" + repository.getObject("1"));

		repository.updateObject("1", "Peach Tree");

		System.out.println("3. " + repository.getAllObjects());

		repository.deleteObject("2");

		System.out.println("4. " + repository.getAllObjects());
		
	}
}



你可能感兴趣的:(MongoDB,Spring集成Mongo)