`

【转】使用Spring Data来操作MongoDB(单实例)

 
阅读更多

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创建一个应用。

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

package com.orangeslate.naturestore.domain;

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

@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 + "]";
	}
}

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

 

 

 

 

package com.orangeslate.naturestore.repository;

import java.util.List;

import com.mongodb.WriteResult;

public interface Repository<T> {

	public List<T> 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();
}

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

package com.orangeslate.naturestore.repository;

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;
import com.orangeslate.naturestore.domain.Tree;

public class NatureRepositoryImpl implements Repository<Tree> {

	MongoTemplate mongoTemplate;

	public void setMongoTemplate(MongoTemplate mongoTemplate) {
		this.mongoTemplate = mongoTemplate;
	}

	/**
	 * Get all trees.
	 */
	public List<Tree> getAllObjects() {
		return mongoTemplate.findAll(Tree.class);
	}

	/**
	 * Saves a {<span class="referer">@link</span>  Tree}.
	 */
	public void saveObject(Tree tree) {
		mongoTemplate.insert(tree);
	}

	/**
	 * Gets a {<span class="referer">@link</span>  Tree} for a particular id.
	 */
	public Tree getObject(String id) {
		return mongoTemplate.findOne(new Query(Criteria.where("id").is(id)),
				Tree.class);
	}

	/**
	 * Updates a {<span class="referer">@link</span>  Tree} name for a particular id.
	 */
	public WriteResult updateObject(String id, String name) {
		return mongoTemplate.updateFirst(
				new Query(Criteria.where("id").is(id)),
				Update.update("name", name), Tree.class);
	}

	/**
	 * Delete a {<span class="referer">@link</span>  Tree} for a particular id.
	 */
	public void deleteObject(String id) {
		mongoTemplate
				.remove(new Query(Criteria.where("id").is(id)), Tree.class);
	}

	/**
	 * Create a {<span class="referer">@link</span>  Tree} collection if the collection does not already
	 * exists
	 */
	public void createCollection() {
		if (!mongoTemplate.collectionExists(Tree.class)) {
			mongoTemplate.createCollection(Tree.class);
		}
	}

	/**
	 * Drops the {<span class="referer">@link</span>  Tree} collection if the collection does already exists
	 */
	public void dropCollection() {
		if (mongoTemplate.collectionExists(Tree.class)) {
			mongoTemplate.dropCollection(Tree.class);
		}
	}
}

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

 

<?xml version="1.0" encoding="UTF-8"?>
<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"
	xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-3.0.xsd


http://www.springframework.org/schema/context

        http://www.springframework.org/schema/context/spring-context-3.0.xsd">

	<bean id="natureRepository"
		class="com.orangeslate.naturestore.repository.NatureRepositoryImpl">
		<property name="mongoTemplate" ref="mongoTemplate" />
	</bean>

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

	<!-- Factory bean that creates the Mongo instance -->
	<bean id="mongo" class="org.springframework.data.mongodb.core.MongoFactoryBean">
		<property name="host" value="localhost" />
		<property name="port" value="27017" />
	</bean>

	<!-- Activate annotation configured components -->
	<context:annotation-config />

	<!-- Scan components for annotations within the configured package -->
	<context:component-scan base-package="com.orangeslate.naturestore">
		<context:exclude-filter type="annotation"
			expression="org.springframework.context.annotation.Configuration" />
	</context:component-scan>

</beans>

 

创建一个测试类。这里我已经创建了一个测试类,并通过ClassPathXmlApplicationContext来初始化他。

 

package com.orangeslate.naturestore.test;

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

import com.orangeslate.naturestore.domain.Tree;
import com.orangeslate.naturestore.repository.NatureRepositoryImpl;
import com.orangeslate.naturestore.repository.Repository;

public class MongoTest {

	public static void main(String[] args) {

		ConfigurableApplicationContext context = new ClassPathXmlApplicationContext(
				"classpath:/spring/applicationContext.xml");

		Repository repository = context.getBean(NatureRepositoryImpl.class);

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

		// create collection
		repository.createCollection();

		repository.saveObject(new Tree("1", "Apple Tree", 10));

		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());
	}
}

 最后,让我们以Java应用程序的方式运行这个示例,我们可以看到如下的输出。第一个方法存储了一个"Apple Tree"。第二个方法存储了一个"Orange Tree"。第三个方法通过id获取一个对象。第四个使用Peach Tree更新对象。最后一个方法删除了第二个对象。

1. [Person [id=1, name=Apple Tree, age=10, category=null]]
2. [Person [id=1, name=Apple Tree, age=10, category=null], Person [id=2, name=Orange Tree, age=3, category=null]]
Tree with id 1Person [id=1, name=Apple Tree, age=10, category=null]
3. [Person [id=1, name=Peach Tree, age=10, category=null], Person [id=2, name=Orange Tree, age=3, category=null]]
4. [Person [id=1, name=Peach Tree, age=10, category=null]]

 注:可以在GitHub上下载到源码

 

转自:http://www.open-open.com/lib/view/open1342877356974.html

分享到:
评论

相关推荐

    Spring-Data-MongoDB3.2

    Spring Data MongoDB项目是Spring框架的一部分,它提供了一个方便的API来操作MongoDB数据库,使得开发人员可以更高效地进行数据存储和检索。 **1. Spring Data MongoDB简介** Spring Data MongoDB提供了与MongoDB...

    spring-data使用mongodbTemplate对MongoDB进行读写操作

    Spring Data MongoDB是一个强大的Java库,它为开发人员提供了一种简单的方式来访问和操作MongoDB数据库。这个库是Spring Data框架的一部分,旨在简化数据访问层的实现,尤其在使用NoSQL数据库如MongoDB时。MongoDB...

    spring mvc+spring data+mongodb实例1

    总结起来,"spring mvc+spring data+mongodb实例1"是一个综合性的教程,展示了如何使用Spring框架与MongoDB结合,构建一个功能完善的Web应用。这个实例涵盖了Spring MVC的控制器设计、Spring Data MongoDB的使用,...

    spring-data-mongodb-parent-reference

    最后,文档的格式和内容表明了它是为了给Java开发者提供一份详尽的参考指南,以便他们可以高效地使用Spring Data MongoDB框架来操作MongoDB数据库。通过官方文档,开发者可以获取到最佳实践、示例代码以及与Spring...

    springdata mongodb api文档

    当需要扩展SpringData的功能时,SpringData MongoDB也提供了一定的扩展机制,例如使用Query DSL扩展进行复杂查询,或者使用Web支持来构建基于SpringData MongoDB的Web应用。 对于那些希望了解如何使用SpringData ...

    spring data mongodb代码参考

    Spring Data MongoDB 是一个用于简化MongoDB数据库操作的框架,它为Spring应用提供了强大的支持,使得开发者可以更加方便地集成和操作非关系型数据库。在这个"spring data mongodb代码参考"中,我们将深入探讨如何...

    spring-data-mongodb-reference 1.5.4

    Spring Data MongoDB 1.5.4 版本为开发者提供了更强大的功能和更简便的操作方式。 #### 二、需求与资源 **1. 需求** - Java 开发环境:推荐使用 Java 1.7 或更高版本。 - MongoDB 数据库:推荐使用 MongoDB 2.4 ...

    spring data mongodb

    1. **Repository接口**:Spring Data MongoDB通过Repository接口提供了一种声明式的方式来定义数据库操作。例如,你可以定义一个继承自`MongoRepository`的接口,其中包含CRUD(创建、读取、更新、删除)操作的方法...

    springmvc3.14+spring_data_mongodb1.3.2最新实例

    希望让更多喜欢mongodb的开发爱好者们加入这个阵营,共同学习,共同提高,这个示例简单易用,导入即上手,哥们我也是费了段时间整合这个最新稳定版本的,采用的是springmvc3.14+spring_data_mongodb1.3.2+mongodb_...

    spring mongodb 用法总结和实例

    2. **MongoTemplate**:`MongoTemplate`是Spring Data MongoDB的核心组件,它提供了丰富的API来执行各种MongoDB操作。在示例中,`mongoTemplate.getCollectionName(Person.class)`方法用于获取指定实体类对应的集合...

    spring-boot操作mongodb例子

    使用 Spring Data MongoDB 提供的注解,如 `@Repository` 和 `@Autowired`,创建一个 Repository 接口继承 `MongoRepository`。这将提供基本的 CRUD 操作: ```java public interface UserRepository extends ...

    spring-data-mongodb-reference 1.5.2

    总体来看,文档涵盖了Spring Data MongoDB 1.5.2版本的各个方面,从基础的数据库连接到复杂的仓库操作,为开发者提供了详尽的指导和最佳实践。无论开发者是初次尝试Spring Data MongoDB,还是希望更深入地了解高级...

    spring4.2 mongodb 全部jar包

    3. 创建MongoDB模板:使用`MongoFactoryBean`或`MongoClient`创建MongoDB实例,然后通过`MongoTemplate`进行数据库操作。 4. 实现数据访问接口:可以使用`MongoRepository`接口定义CRUD操作,Spring Data会自动实现...

    Spring3.1 MongoDB整合实例(含jar包)已测

    Spring Data MongoDB允许开发者通过简单的接口定义来实现对MongoDB的操作,例如CRUD(创建、读取、更新和删除)操作,而无需编写大量的低级代码。 在整合Spring和MongoDB时,你需要以下核心组件: 1. **MongoDB ...

    使用spring连接及操作mongodb3.0实例

    在本文中,我们将探讨如何使用Spring连接并操作MongoDB 3.0版本。 首先,我们需要在项目中引入相应的依赖。在Maven项目中,这通常通过在pom.xml文件中添加依赖来完成。在提供的内容中,我们可以看到以下关键依赖: ...

    springMongodb参考文档中文版

    - **SpringData**:利用Spring框架的核心功能如IoC容器、类型转换系统等。 - **核心概念**:虽然不需要深入了解Spring API的具体细节,但对Spring框架背后的原理有一定认识是非常重要的,比如IoC容器的概念。 #### ...

    Springboot整合MongoDB进行CRUD操作的两种方式(实例代码详解)

    为了方便,使用Docker来启动MongoDB。主要的依赖为Web和MongoDB的starter,把下面代码加入到pom.xml中即可: ``` &lt;groupId&gt;org.springframework.boot &lt;artifactId&gt;spring-boot-starter-data-mongodb ...

    最新spring-data-mongo

    【Spring Data MongoDB】是Spring框架的一个重要组成部分,专注于简化MongoDB数据库的访问和操作。Spring Data Commons是一个核心模块,提供了与各种数据存储交互的一般机制,而`spring-data-mongo`则是专门针对...

    JAVA操作MongoDB之spring整合

    总结来说,"JAVA操作MongoDB之spring整合"涉及到的主要知识点包括:Spring Boot项目结构,MongoDB的配置和连接,Spring Data MongoDB的MongoRepository接口,以及如何在Controller层处理HTTP请求。通过这样的整合,...

    SpringMVC+mongodb应用实例

    Spring Data MongoDB项目提供了一个简单的方式来连接和操作MongoDB。它包括一个MongoTemplate类,用于执行基本的数据库操作,以及Repository接口,可以自定义查询方法。通过配置MongoDB的连接信息,我们可以轻松地在...

Global site tag (gtag.js) - Google Analytics