Spring Data MongoDB示例

欢迎使用Spring Data MongoDB示例。Spring Data MongoDB是将Spring Framework与最广泛使用的NoSQL数据库MongoDB集成的Spring项目之一。

目录[ 隐藏 ]

  • 1 Spring Data MongoDB

    • 1.1 Spring Data MongoDB示例 - 模型Bean
    • 1.2 Spring Data MongoDB DAO类
    • 1.3 Spring数据MongoDB Bean配置文件
    • 1.4 Spring Data MongoDB测试程序
    • 1.5基于Spring数据MongoDB注释的配置
    • 1.6将MongoOptions用于MongoDB连接选项
    • 1.7 Spring Data MongoDB示例摘要

Spring Data MongoDB

使用Spring的一个主要好处是它提供了与企业应用程序中使用的大多数主要框架的集成。例如,Spring ORM Hibernate Integration。

我们将使用最新版本的Spring Framework和Spring Data MongoDB作为示例项目。我们最终的Spring Data MongoDB示例项目如下图所示。

Spring Data MongoDB也可以在一个简单的应用程序中使用,它不需要使用Spring框架。让我们看一下简单的Spring MongoDB示例。为此,您需要在pom.xml文件中包含以下依赖项,它将通过maven传递依赖项自动包含兼容的MongoDB java驱动程序。


<dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-mongodb</artifactId><version>1.5.2.RELEASE</version>
</dependency>

Spring Data MongoDB示例 - 模型Bean

我们将有一个简单的模型bean,其中一些变量存储在MongoDB数据库中。

Person.java


package com.journaldev.spring.mongodb.model;import org.springframework.data.annotation.Id;public class Person {//id will be used for storing MongoDB _id@Idprivate String id;private String name;private String address;public Person(){}public Person(String i, String n, String a){this.id=i;this.name=n;this.address=a;}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 getAddress() {return address;}public void setAddress(String address) {this.address = address;}@Overridepublic String toString(){return id+"::"+name+"::"+address;}
}

这是一个简单的java bean,但是你应该知道的重点很少。

  1. 我们知道MongoDB中的每个文档都需要有一个名为_id的主键,我们可以提供它,或者MongoDB会为我们生成它。我们可以使用org.springframework.data.annotation.Id模型bean变量的注释将它映射到_id字段。
  2. 如果字段名称是“id”,那么我们不需要使用@Id注释,但是最好使用它。在上面的课程中,我们可以跳过@Id注释。
  3. 您应该始终在bean中具有id字段,否则它将不会映射到对象的任何属性,并且您将丢失主键引用。

现在让我们看看如何轻松使用Spring Data MongoDB在MongoDB数据库上执行CRUD操作。

SpringDataMongoDBMain.java


package com.journaldev.spring.mongodb.main;import java.net.UnknownHostException;import org.springframework.data.mongodb.core.MongoOperations;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;import com.journaldev.spring.mongodb.model.Person;
import com.mongodb.MongoClient;public class SpringDataMongoDBMain {public static final String DB_NAME = "journaldev";public static final String PERSON_COLLECTION = "Person";public static final String MONGO_HOST = "localhost";public static final int MONGO_PORT = 27017;public static void main(String[] args) {try {MongoClient mongo = new MongoClient(MONGO_HOST, MONGO_PORT);MongoOperations mongoOps = new MongoTemplate(mongo, DB_NAME);Person p = new Person("113", "PankajKr", "Bangalore, India");mongoOps.insert(p, PERSON_COLLECTION);Person p1 = mongoOps.findOne(new Query(Criteria.where("name").is("PankajKr")),Person.class, PERSON_COLLECTION);System.out.println(p1);mongoOps.dropCollection(PERSON_COLLECTION);mongo.close();} catch (UnknownHostException e) {e.printStackTrace();}}}

现在当我运行Spring Data MongoDB示例程序时,它会生成以下输出。


02:02:14.785 [main] DEBUG o.s.d.m.c.i.MongoPersistentEntityIndexCreator - Analyzing class class com.journaldev.spring.mongodb.model.Person for index information.
02:02:14.794 [main] DEBUG o.s.data.mongodb.core.MongoTemplate - Inserting DBObject containing fields: [_class, _id, name, address] in collection: Person
02:02:14.798 [main] DEBUG o.s.data.mongodb.core.MongoDbUtils - Getting Mongo Database name=[journaldev]
02:02:14.824 [main] DEBUG o.s.data.mongodb.core.MongoTemplate - findOne using query: { "name" : "PankajKr"} fields: null for class: class com.journaldev.spring.mongodb.model.Person in collection: Person
02:02:14.826 [main] DEBUG o.s.data.mongodb.core.MongoDbUtils - Getting Mongo Database name=[journaldev]
02:02:14.826 [main] DEBUG o.s.data.mongodb.core.MongoTemplate - findOne using query: { "name" : "PankajKr"} in db.collection: journaldev.Person
113::PankajKr::Bangalore, India
02:02:14.833 [main] DEBUG o.s.data.mongodb.core.MongoDbUtils - Getting Mongo Database name=[journaldev]
02:02:14.835 [main] DEBUG o.s.data.mongodb.core.MongoTemplate - Dropped collection [journaldev.Person]

从我们的学习到现在,我们可以总结Spring Data MongoDB的以下几点。

  1. Spring Data MongoDB提供了MongoDB java驱动程序的包装器,在内部使用MongoDB java驱动程序来执行数据库操作。
  2. MongoOperations为不同的操作声明了很多方法,大多数时候,它们对我们来说足够了。MongoTemplate是实现类,它需要MongoMongoClient(对于较新的MongoDB java驱动程序版本)或MongoDbFactory初始化它。我们还需要提供将要使用的数据库名称。
  3. 如果数据库受密码保护,我们可以使用org.springframework.data.authentication.UserCredentials传递身份验证用户名和密码详细信息。
  4. org.springframework.data.mongodb.core.query.Queryorg.springframework.data.mongodb.core.query.Criteria类用于定义用于查找特定记录或记录的查询。
  5. Spring Data MongoDB的主要好处是我们不需要担心java bean到Mongo DBObject的转换,反之亦然,正如我们在MongoDB Java Example中看到的那样。

现在让我们继续在Spring环境中使用Spring Data MongoDB。它非常简单,主要需要配置相关的代码,我们可以通过XML,注释或通过java配置来完成。但是,我将为Spring Data MongoDB示例使用基于XML的配置。

这是我最后一个带有Spring Framework和Spring Data MongoDB依赖项的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>org.springframework.samples</groupId><artifactId>SpringMongo</artifactId><version>0.0.1-SNAPSHOT</version><properties><!-- Generic properties --><java.version>1.6</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><!-- Spring --><spring-framework.version>4.0.3.RELEASE</spring-framework.version><spring-data-mongodb.version>1.5.2.RELEASE</spring-data-mongodb.version><!-- Logging --><logback.version>1.0.13</logback.version><slf4j.version>1.7.5</slf4j.version></properties><dependencies><!-- Spring and Transactions --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring-framework.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>${spring-framework.version}</version></dependency><dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-mongodb</artifactId><version>${spring-data-mongodb.version}</version></dependency><!-- Logging with SLF4J & LogBack --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>${slf4j.version}</version><scope>compile</scope></dependency><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>${logback.version}</version><scope>runtime</scope></dependency></dependencies>
</project>

Spring Data MongoDB DAO类

我们将使用DAO模式公开可以在Person对象上执行的不同操作。

PersonDAO.java


package com.journaldev.spring.mongodb.dao;import com.journaldev.spring.mongodb.model.Person;public interface PersonDAO {public void create(Person p);public Person readById(String id);public void update(Person p);public int deleteById(String id);
}

下面是MongoDB特定的实现类。

PersonDAOImpl.java


package com.journaldev.spring.mongodb.dao;import org.springframework.data.mongodb.core.MongoOperations;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;import com.journaldev.spring.mongodb.model.Person;
import com.mongodb.WriteResult;public class PersonDAOImpl implements PersonDAO {private MongoOperations mongoOps;private static final String PERSON_COLLECTION = "Person";public PersonDAOImpl(MongoOperations mongoOps){this.mongoOps=mongoOps;}@Overridepublic void create(Person p) {this.mongoOps.insert(p, PERSON_COLLECTION);}@Overridepublic Person readById(String id) {Query query = new Query(Criteria.where("_id").is(id));return this.mongoOps.findOne(query, Person.class, PERSON_COLLECTION);}@Overridepublic void update(Person p) {this.mongoOps.save(p, PERSON_COLLECTION);}@Overridepublic int deleteById(String id) {Query query = new Query(Criteria.where("_id").is(id));WriteResult result = this.mongoOps.remove(query, Person.class, PERSON_COLLECTION);return result.getN();}}

代码很简单,所以我不会详细解释它们。

Spring Data MongoDB Bean配置文件

与往常一样,此应用程序最重要的部分是spring bean配置文件。我们将依赖注入不同的bean并定义它们。

这是我们的最终spring bean配置文件。

spring.xml


<?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"xmlns:mongo="http://www.springframework.org/schema/data/mongo"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsdhttp://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/mongo/spring-mongo-1.5.xsd"><mongo:mongo host="localhost" port="27017" id="mongo" />
<mongo:db-factory dbname="journaldev" mongo-ref="mongo" id="mongoDbFactory" /><bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate"><constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
</bean><bean id="personDAO" class="com.journaldev.spring.mongodb.dao.PersonDAOImpl"><constructor-arg name="mongoOps" ref="mongoTemplate"/>
</bean>
</beans>

应该存在的重要配置是 - Spring Data MongoDB架构和MongoDB连接的Mongo实例。为方便起见,我定义了MongoDbFactory实例,我们也可以像下面一样定义MongoTemplate bean,


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

Spring Data MongoDB测试程序

最后,让我们编写一个简单的测试程序,并在MongoDB数据库上运行一些CRUD操作。

SpringMongoDBXMLMain.java


package com.journaldev.spring.mongodb.main;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.journaldev.spring.mongodb.dao.PersonDAO;
import com.journaldev.spring.mongodb.model.Person;public class SpringMongoDBXMLMain {public static void main(String[] args) {ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("spring.xml");PersonDAO personDAO = ctx.getBean("personDAO", PersonDAO.class);Person p = new Person(null, "PankajKr", "Bangalore, India");//createpersonDAO.create(p);System.out.println("Generated ID="+p.getId());//readPerson p1 = personDAO.readById(p.getId());System.out.println("Retrieved Person="+p1);//updatep1.setName("David");p1.setAddress("SFO, USA");personDAO.update(p1);Person temp = personDAO.readById(p1.getId());System.out.println("Retrieved Person after update="+temp);//deleteint count = personDAO.deleteById(p1.getId());System.out.println("Number of records deleted="+count);ctx.close();}}

现在当我运行上面的应用程序时,它会生成以下输出。


02:27:34.509 [main] DEBUG o.s.d.m.c.i.MongoPersistentEntityIndexCreator - Analyzing class class com.journaldev.spring.mongodb.model.Person for index information.
02:27:34.516 [main] DEBUG o.s.data.mongodb.core.MongoTemplate - Inserting DBObject containing fields: [_class, _id, name, address] in collection: Person
02:27:34.520 [main] DEBUG o.s.data.mongodb.core.MongoDbUtils - Getting Mongo Database name=[journaldev]
Generated ID=53f50bbe0364b65dbc0c4753
02:27:34.532 [main] DEBUG o.s.data.mongodb.core.MongoTemplate - findOne using query: { "_id" : "53f50bbe0364b65dbc0c4753"} fields: null for class: class com.journaldev.spring.mongodb.model.Person in collection: Person
02:27:34.533 [main] DEBUG o.s.data.mongodb.core.MongoDbUtils - Getting Mongo Database name=[journaldev]
02:27:34.535 [main] DEBUG o.s.data.mongodb.core.MongoTemplate - findOne using query: { "_id" : { "$oid" : "53f50bbe0364b65dbc0c4753"}} in db.collection: journaldev.Person
Retrieved Person=53f50bbe0364b65dbc0c4753::PankajKr::Bangalore, India
02:27:34.543 [main] DEBUG o.s.data.mongodb.core.MongoTemplate - Saving DBObject containing fields: [_class, _id, name, address]
02:27:34.543 [main] DEBUG o.s.data.mongodb.core.MongoDbUtils - Getting Mongo Database name=[journaldev]
02:27:34.545 [main] DEBUG o.s.data.mongodb.core.MongoTemplate - findOne using query: { "_id" : "53f50bbe0364b65dbc0c4753"} fields: null for class: class com.journaldev.spring.mongodb.model.Person in collection: Person
02:27:34.545 [main] DEBUG o.s.data.mongodb.core.MongoDbUtils - Getting Mongo Database name=[journaldev]
02:27:34.546 [main] DEBUG o.s.data.mongodb.core.MongoTemplate - findOne using query: { "_id" : { "$oid" : "53f50bbe0364b65dbc0c4753"}} in db.collection: journaldev.Person
Retrieved Person after update=53f50bbe0364b65dbc0c4753::David::SFO, USA
02:27:34.549 [main] DEBUG o.s.data.mongodb.core.MongoDbUtils - Getting Mongo Database name=[journaldev]
02:27:34.550 [main] DEBUG o.s.data.mongodb.core.MongoTemplate - Remove using query: { "_id" : { "$oid" : "53f50bbe0364b65dbc0c4753"}} in collection: Person.
Number of records deleted=1
02:27:34.553 [main] INFO  o.s.c.s.ClassPathXmlApplicationContext - Closing org.springframework.context.support.ClassPathXmlApplicationContext@7a187814: startup date [Thu Aug 21 02:27:33 GMT+05:30 2014]; root of context hierarchy
02:27:34.553 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Returning cached instance of singleton bean 'lifecycleProcessor'
02:27:34.553 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@3f64b09c: defining beans [mongo,org.springframework.beans.factory.config.CustomEditorConfigurer#0,org.springframework.beans.factory.config.CustomEditorConfigurer#1,org.springframework.beans.factory.config.CustomEditorConfigurer#2,mongoDbFactory,mongoTemplate,personDAO]; root of factory hierarchy
02:27:34.554 [main] DEBUG o.s.b.f.s.DisposableBeanAdapter - Invoking destroy() on bean with name 'mongoDbFactory'
02:27:34.554 [main] DEBUG o.s.b.f.s.DisposableBeanAdapter - Invoking destroy() on bean with name 'mongo'

请注意,当Spring上下文关闭时,它也会关闭MongoDB连接,所以我们不需要担心。

另外,我在每个查询中提供MongoDB Collection名称,如果集合名称确认为java命名约定,我们可以跳过它。例如,对于“Person”和“PersonAddress”对象,Spring MongoDB使用的默认集合名称分别是“person”和“personAddress”。

我们还可以使用org.springframework.data.mongodb.core.mapping.DocumentModel类的注释来定义用于保存文档的集合名称。

基于Spring Data MongoDB注释的配置

如果要使用基于注释的配置,可以使用下面的Configuration类进行参考。

SpringMongoDBConfiguration.java


package com.journaldev.spring.mongodb.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 SpringMongoDBConfiguration {public @Bean MongoDbFactory getMongoDbFactory() throws Exception {return new SimpleMongoDbFactory(new MongoClient("localhost",27017), "journaldev");}public @Bean MongoTemplate getMongoTemplate() throws Exception {MongoTemplate mongoTemplate = new MongoTemplate(getMongoDbFactory());return mongoTemplate;}
}

我们还需要其他配置来将MongoTemplate bean注入到我们的DAO实现类中,我将这部分留给您。

使用MongoOptions进行MongoDB连接选项

我们可以用来MongoOptions在spring bean配置文件中定义MongoDB选项,如下所示。还有一些其他配置选项,您可以检查优化连接。


<mongo:mongo host="localhost" port="27017"><mongo:options connections-per-host="4"connect-timeout="1000"max-wait-time="1500"auto-connect-retry="true"socket-keep-alive="true"socket-timeout="1500"write-fsync="true" /></mongo:mongo>

Spring Data MongoDB示例摘要

我希望这个教程足以让你开始使用Spring Data MongoDB,覆盖所有内容是不可行的。您应该更多地了解Query,Criteria和MongoTemplate方法以了解更多信息。您可以从下面的链接下载最终项目。

下载Spring Data MongoDB项目

Spring Data MongoDB示例相关推荐

  1. 使用Spring访问Mongodb的方法大全——Spring Data MongoDB查询指南

    1.概述 Spring Data MongoDB 是Spring框架访问mongodb的神器,借助它可以非常方便的读写mongo库.本文介绍使用Spring Data MongoDB来访问mongod ...

  2. Spring Boot的Spring Data JPA示例

    1.简介 在本文中,我们将演示如何利用功能强大的Spring Data JPA API与本课程中的数据库(内存中的H2数据库)进行交互. Spring Data JPA提供了一组非常强大且高度抽象的接 ...

  3. Spring Data MongoDB教程

    在当今世界,尽快启动并运行应用程序非常重要. 该应用程序还应该易于开发和维护. Spring是这样的框架,它提供了与许多不同框架的集成的简便性,这使得使用Spring开发应用程序变得容易. 一种这样的 ...

  4. 数据聚合Spring Data MongoDB:嵌套结果

    1引言 在上一篇文章中,我们构建了聚合管道的基本示例. 如果您需要有关如何创建项目和配置应用程序的更多详细信息,也许您想看看使用Spring Data MongoDB和Spring Boot进行数据聚 ...

  5. orderby排序慢_使用@OrderBy对Spring Data MongoDB集合进行排序

    orderby排序慢 这是关于调整和增强Spring Data MongoDB功能的第三篇文章. 这次,我发现我错过了一个JPA功能– @OrderBy批注. @OrderBy指定在检索关联值时集合值 ...

  6. Spring Data MongoDB级联保存在DBRef对象上

    默认情况下, Spring Data MongoDB不支持对带有@DBRef注释的引用对象的级联操作,如引用所述 : 映射框架不处理级联保存 . 如果更改了Person对象引用的Account对象,则 ...

  7. Spring Data MongoDB中的审核实体

    Spring Data MongoDB 1.2.0静默引入了新功能:支持基本审核 . 因为您不会在本文的官方参考中找到太多有关它的信息,所以我将展示它带来的好处,如何配置Spring以进行审计以及如何 ...

  8. 使用NoSQLUnit测试Spring Data MongoDB应用程序

    Spring Data MongoDB是Spring Data项目中的项目,它提供了Spring编程模型的扩展,用于编写使用MongoDB作为数据库的应用程序. 要使用NoSQLUnit为Spring ...

  9. 使用@OrderBy对Spring Data MongoDB集合进行排序

    这是关于调整和增强Spring Data MongoDB功能的第三篇文章. 这次,我发现我错过了一个JPA功能– @OrderBy批注. @OrderBy指定在检索关联值时集合值关联的元素的顺序. 在 ...

最新文章

  1. [js高手之路]设计模式系列课程-发布者,订阅者重构购物车
  2. php map添加元素,html map标签怎么用
  3. ios怎么玩java模拟器游戏_新方式玩iOS手游 水果模拟器让电脑运行苹果iOS
  4. 第三方免费开放API 获取用户IP 并查询其地理位置
  5. 基于任务编程_如何理解任何编程任务
  6. 面试中 项目遇见的难点答案_5月6日周一晚八点CCtalk直播2019年江苏省考公务员面试冲刺类型题难点解析突破举一反三...
  7. java jquery用的多吗_[Java教程]如果不用jQuery,Ajax你还能写出多少?
  8. 运维必看:2017 年 Python 大事件年度盘点!
  9. 一位声音甜美的小老师的Oracle学习视频
  10. 微软阿根廷服务器解锁,XBOX阿根廷服购买教程
  11. 如何查看自己电脑的本地IP地址
  12. 小程序加载不出来图片
  13. java 如何获取当前时间到夜晚12点的毫秒差值
  14. hdoj--1495--非常可乐(搜索+隐式图)
  15. MES入门.浅谈ISA-95
  16. gorm增删查改json_go基于echo、gorm实现增删改查,从请求到落库
  17. 懂点前端——对CSS中的Padding、Border、Margin属性的理解
  18. zip不是内部或外部命令,也不是可执行程序”详细解决办法
  19. mybatis+mysql读取日期2020-09-19返回2020-09-18T16:00:00.000+0000
  20. 商品与产品的哲学区别与不可知论的“知识”统一能力

热门文章

  1. Swift中文教程(十二) 下标
  2. FullCalendar 五:FullCalendar应用——编辑与删除日程事件
  3. Python设置默认语言编码
  4. codeigniter + Ajax (亲测)
  5. 【AI视野·今日CV 计算机视觉论文速览 第173期】Wed, 25 Dec 2019
  6. 字节流复制文件 java
  7. 视频 java 我行我素管理系统 随堂视频
  8. centos安装python3.8
  9. 1910101811
  10. dj电商-模型类设计-1.x-模型类抽象基类