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上下载到源码。
相关推荐
Spring Data MongoDB项目是Spring框架的一部分,它提供了一个方便的API来操作MongoDB数据库,使得开发人员可以更高效地进行数据存储和检索。 **1. Spring Data MongoDB简介** Spring Data MongoDB提供了与MongoDB...
Spring Data MongoDB是一个强大的Java库,它为开发人员提供了一种简单的方式来访问和操作MongoDB数据库。这个库是Spring Data框架的一部分,旨在简化数据访问层的实现,尤其在使用NoSQL数据库如MongoDB时。MongoDB...
总结起来,"spring mvc+spring data+mongodb实例1"是一个综合性的教程,展示了如何使用Spring框架与MongoDB结合,构建一个功能完善的Web应用。这个实例涵盖了Spring MVC的控制器设计、Spring Data MongoDB的使用,...
最后,文档的格式和内容表明了它是为了给Java开发者提供一份详尽的参考指南,以便他们可以高效地使用Spring Data MongoDB框架来操作MongoDB数据库。通过官方文档,开发者可以获取到最佳实践、示例代码以及与Spring...
当需要扩展SpringData的功能时,SpringData MongoDB也提供了一定的扩展机制,例如使用Query DSL扩展进行复杂查询,或者使用Web支持来构建基于SpringData MongoDB的Web应用。 对于那些希望了解如何使用SpringData ...
Spring Data MongoDB 是一个用于简化MongoDB数据库操作的框架,它为Spring应用提供了强大的支持,使得开发者可以更加方便地集成和操作非关系型数据库。在这个"spring data mongodb代码参考"中,我们将深入探讨如何...
Spring Data MongoDB 1.5.4 版本为开发者提供了更强大的功能和更简便的操作方式。 #### 二、需求与资源 **1. 需求** - Java 开发环境:推荐使用 Java 1.7 或更高版本。 - MongoDB 数据库:推荐使用 MongoDB 2.4 ...
1. **Repository接口**:Spring Data MongoDB通过Repository接口提供了一种声明式的方式来定义数据库操作。例如,你可以定义一个继承自`MongoRepository`的接口,其中包含CRUD(创建、读取、更新、删除)操作的方法...
希望让更多喜欢mongodb的开发爱好者们加入这个阵营,共同学习,共同提高,这个示例简单易用,导入即上手,哥们我也是费了段时间整合这个最新稳定版本的,采用的是springmvc3.14+spring_data_mongodb1.3.2+mongodb_...
2. **MongoTemplate**:`MongoTemplate`是Spring Data MongoDB的核心组件,它提供了丰富的API来执行各种MongoDB操作。在示例中,`mongoTemplate.getCollectionName(Person.class)`方法用于获取指定实体类对应的集合...
使用 Spring Data MongoDB 提供的注解,如 `@Repository` 和 `@Autowired`,创建一个 Repository 接口继承 `MongoRepository`。这将提供基本的 CRUD 操作: ```java public interface UserRepository extends ...
总体来看,文档涵盖了Spring Data MongoDB 1.5.2版本的各个方面,从基础的数据库连接到复杂的仓库操作,为开发者提供了详尽的指导和最佳实践。无论开发者是初次尝试Spring Data MongoDB,还是希望更深入地了解高级...
3. 创建MongoDB模板:使用`MongoFactoryBean`或`MongoClient`创建MongoDB实例,然后通过`MongoTemplate`进行数据库操作。 4. 实现数据访问接口:可以使用`MongoRepository`接口定义CRUD操作,Spring Data会自动实现...
Spring Data MongoDB允许开发者通过简单的接口定义来实现对MongoDB的操作,例如CRUD(创建、读取、更新和删除)操作,而无需编写大量的低级代码。 在整合Spring和MongoDB时,你需要以下核心组件: 1. **MongoDB ...
在本文中,我们将探讨如何使用Spring连接并操作MongoDB 3.0版本。 首先,我们需要在项目中引入相应的依赖。在Maven项目中,这通常通过在pom.xml文件中添加依赖来完成。在提供的内容中,我们可以看到以下关键依赖: ...
- **SpringData**:利用Spring框架的核心功能如IoC容器、类型转换系统等。 - **核心概念**:虽然不需要深入了解Spring API的具体细节,但对Spring框架背后的原理有一定认识是非常重要的,比如IoC容器的概念。 #### ...
为了方便,使用Docker来启动MongoDB。主要的依赖为Web和MongoDB的starter,把下面代码加入到pom.xml中即可: ``` <groupId>org.springframework.boot <artifactId>spring-boot-starter-data-mongodb ...
【Spring Data MongoDB】是Spring框架的一个重要组成部分,专注于简化MongoDB数据库的访问和操作。Spring Data Commons是一个核心模块,提供了与各种数据存储交互的一般机制,而`spring-data-mongo`则是专门针对...
总结来说,"JAVA操作MongoDB之spring整合"涉及到的主要知识点包括:Spring Boot项目结构,MongoDB的配置和连接,Spring Data MongoDB的MongoRepository接口,以及如何在Controller层处理HTTP请求。通过这样的整合,...
Spring Data MongoDB项目提供了一个简单的方式来连接和操作MongoDB。它包括一个MongoTemplate类,用于执行基本的数据库操作,以及Repository接口,可以自定义查询方法。通过配置MongoDB的连接信息,我们可以轻松地在...