在当今世界,尽快启动并运行应用程序非常重要。 该应用程序还应该易于开发和维护。

Spring是这样的框架,它提供了与许多不同框架的集成的简便性,这使得使用Spring开发应用程序变得容易。 一种这样的集成是Spring与MongoDB的集成。

1.简介

在本教程中,我们将讨论最著名的Java框架“ Spring”和最著名的NoSQL数据库“ MongoDB”的结合。 MongoDB是一个基于文档的NoSQL数据库,它以JSON之类的结构存储数据。

Spring提供了SpringData和MongoDB的集成,以方便两者的集成,并为开发人员提供便利,而无需为编写用于插入,更新和删除的多个查询而烦恼。

以下是SpringData MongoDB项目提供的一些功能:

  1. SpringData允许同时使用@Configuration类和基于XML的配置。
  2. Spring的数据访问异常层次结构用于异常的转换。
  3. Java的POJO和MongoDB的文档之间的集成映射。
  4. MongoTemplate类,可以轻松使用常见的MongoDB操作。
  5. 除了MongoTemplateMongoReaderMongoWriter类还用于低级别的映射。

了解任何技术的最佳方法是实践,我们现在将做同样的事情。

现在让我们做一个简单的程序来详细了解Spring Data MongoDB。

2.技术和工具

让我们看看用于构建程序的技术和工具。

  1. Eclispe Oxygen.2释放(4.7.2)
  2. Java –版本9.0.4
  3. 摇篮– 4.6
  4. MongoDB服务器– 3.6
  5. MongoCompass – 3.6
  6. SpringDataMongoDB – 2.0.5-RELEASE

3.项目结构

我们的项目结构如下图所示。

SpringDataMongoDB的项目结构

Gradle项目结构将具有上面显示的项目结构。 如果使用pom.xml,则项目结构将略有不同。

4.计划

作为该计划的一部分,我们将尝试实现以下目标。

  1. 将对象保存到MongoDB
  2. 更新MongoDB中的对象
  3. 从MongoDB中删除对象
  4. 从MongoDB获取所有对象

现在让我们了解程序的所有组件。 首先,我们将从程序依赖关系和程序所需的jar开始。

4.1摇篮

我们正在使用Gradle作为该程序的一部分进行构建。 build.gradle文件将如下所示。

build.gradle

apply plugin: 'java'
repositories {mavenCentral()
}dependencies {compile group: 'org.springframework.data', name: 'spring-data-mongodb', version: '2.0.5.RELEASE'implementation 'com.google.guava:guava:23.0'testImplementation 'junit:junit:4.12'
}

在上面的build.gradle文件中, apply plugin: 'java'告诉我们需要设置的插件。 对我们来说,它是Java插件。
repositories{}让我们知道应该从中提取依赖关系的存储库。 我们选择了mavenCentral拉依赖罐。 我们还可以使用jcenter提取相应的依赖罐。
dependencies {}标签用于提供应为项目提取的必要的jar文件详细信息。

4.2 MongoDB的配置

为了使用MongoDB配置,我们需要实现AbstractMongoConfiguration类。 MongoConfig.java类将如下所示。 我们在这里使用注释而不是xml。 但是,甚至XML也可以用于设置配置。

MongoConfig.java类的实现

package com.tutorial.config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.config.AbstractMongoConfiguration;
import com.mongodb.MongoClient;@Configuration
public class MongoConfig extends AbstractMongoConfiguration {@Overridepublic String getDatabaseName() {return "local";}@Override@Beanpublic MongoClient mongoClient() {return new MongoClient("127.0.0.1");}
}

@Configuration用于将类MongoConfig.java定义为配置类。 @Bean定义MongoClient Bean。

4.3模型类别

现在我们来看看模型类。 我们使用student.java作为模型类,其中包含Student的属性,例如名称和年龄。 Student.java模型类用于将POJO映射到MongoDB集合。

学生模型班

package com.tutorial.model;import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;@Document(collection = "students")
public class Student {public Student(String studentName, int studentAge) {this.studentName = studentName;this.studentAge = studentAge;}@Idprivate String id;String studentName;int studentAge;public String getStudentName() {return studentName;}public void setStudentName(String studentName) {this.studentName = studentName;}public int getStudentAge() {return studentAge;}public void setStudentAge(int studentAge) {this.studentAge = studentAge;}@Overridepublic String toString() {return String.format("Student[id=%s, studentName='%s', studentAge="+studentAge+"]",id, studentName);}
}

@Document定义文档。 属性collection定义了集合,该集合将用于与集合进行映射。 在集合中提到的所有属性都应该在POJO类中可用。 @Id定义集合的ID。

4.4 CRUD操作

为了执行诸如保存数据,更新数据,删除数据以及从MongoDB中获取数据之类的CRUD操作,我们将使用MongoOperations

现在让我们看一下MongoDBPOperations.java类。 此类包含CRUD操作的所有方法的实现。

MongoDBPOperations类,将用于执行CRUD操作

package com.tutorial;import java.util.List;import org.springframework.data.mongodb.core.MongoOperations;
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.tutorial.model.Student;public class MongoDBPOperations {public void saveStudent(MongoOperations mongoOperation, Student student) {mongoOperation.save(student);System.out.println("Student saved successfully");// student object got created with id.System.out.println("student : " + student);}public void searchStudent(MongoOperations mongoOperation, String critera,String value) {// query to search studentQuery searchStudent = new Query(Criteria.where(critera).is(value));// find student based on the queryStudent resultStudent = mongoOperation.findOne(searchStudent, Student.class);System.out.println("Student found!!");System.out.println("Student details: " + resultStudent);}public void updateStudent(MongoOperations mongoOperation, String critera,String value, String updateCriteria, String updateValue) {// query to search studentQuery searchStudent = new Query(Criteria.where(critera).is(value));mongoOperation.updateFirst(searchStudent, Update.update(updateCriteria, updateValue),Student.class);System.out.println("Student got updated successfully");}public void getAllStudent(MongoOperations mongoOperation) {List listStudent = mongoOperation.findAll(Student.class);for(Student student:listStudent) {System.out.println("Student = " + student);}}public void removeStudent(MongoOperations mongoOperation, String critera,String value) {Query searchStudent = new Query(Criteria.where(critera).is(value));mongoOperation.remove(searchStudent, Student.class);System.out.println("Student removed successfully!! ");}
}

Java程序最重要的类是包含main方法的类。

4.5应用类别

包含main方法的主要类是Application.java类。 我们将使用此类从MongoDBPOperations类中调用方法。

调用MongoDBPOperations类的方法的应用程序类

package com.tutorial;import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.data.mongodb.core.MongoOperations;
import com.tutorial.config.MongoConfig;
import com.tutorial.model.Student;public class Application {public static void main (String[] args) {// For AnnotationApplicationContext ctx = new AnnotationConfigApplicationContext(MongoConfig.class);MongoOperations mongoOperation = (MongoOperations) ctx.getBean("mongoTemplate");MongoDBPOperations ops = new MongoDBPOperations();Student student = new Student("John", 15);//save studentops.saveStudent(mongoOperation, student);// get student based on search criteriaops.searchStudent(mongoOperation, "studentName", "John");//update student based on criteriaops.updateStudent(mongoOperation, "StudentName", "John", "studentAge", "18");// get student based on search criteriaops.searchStudent(mongoOperation, "studentName", "John");// get all the studentsops.getAllStudent(mongoOperation);//remove student based on criteriaops.removeStudent(mongoOperation, "studentName", "John");// get all the studentsops.getAllStudent(mongoOperation);}}

让我们看一下在Application.java类中执行的分步操作:

  1. 我们正在创建ApplicationContext 。 这是由于需要加载配置。
  2. 另外,创建MongoOperations对象以加载MongoTemplate bean。
  3. MongoDBOperations对象提供对方法的访问,以执行不同的MongoOperation方法。
  4. 此外,创建一个名称为John且年龄为15的Student对象。
  5. 我们正在调用saveMethodMongoDBOperations ,我们将传递必要的参数以将对象保存在数据库中。
  6. 类似地,我们MongoDBOperations调用MongoDBOperations不同方法。

4.6运行程序

最后,让我们现在将程序作为Java应用程序运行。 右键单击Application.java-> Run as-> Java Application。

以下结果将出现在控制台上。

运行程序后的控制台输出

现在让我们注释一下删除对象的命令。 MongoDB将成功存储数据。

此外,让我们注释一下删除对象的行,如下所示。

注释删除方法后的应用程序类

package com.tutorial;import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.data.mongodb.core.MongoOperations;
import com.tutorial.config.MongoConfig;
import com.tutorial.model.Student;public class Application {public static void main (String[] args) {// For AnnotationApplicationContext ctx = new AnnotationConfigApplicationContext(MongoConfig.class);MongoOperations mongoOperation = (MongoOperations) ctx.getBean("mongoTemplate");MongoDBPOperations ops = new MongoDBPOperations();Student student = new Student("John", 15);//save studentops.saveStudent(mongoOperation, student);// get student based on search criteriaops.searchStudent(mongoOperation, "studentName", "John");//update student based on criteriaops.updateStudent(mongoOperation, "StudentName", "John", "studentAge", "18");// get student based on search criteriaops.searchStudent(mongoOperation, "studentName", "John");// get all the studentsops.getAllStudent(mongoOperation);//remove student based on criteria//ops.removeStudent(mongoOperation, "studentName", "John");// get all the students//ops.getAllStudent(mongoOperation);}}

由于程序更改,让我们重新运行该程序。 以下内容将出现在控制台上。

注释删除命令时控制台

由于注释了删除命令,MongoDB将存储数据,因此将如下所示。

保存和更新命令后的MongoDB输出

5.下载Eclipse项目

这是Spring Data MongoDB的一个示例。

下载
您可以在此处下载此示例的完整源代码: SpringDataMongoDBTutorial.zip

翻译自: https://www.javacodegeeks.com/2018/03/spring-data-mongodb-tutorial.html

Spring Data MongoDB教程相关推荐

  1. SpringBoot系列之Spring Data MongoDB教程

    SpringBoot系列之Spring Data MongoDB教程 1.MongoDB下载安装 因为没有买linux服务器,所以本博客只安装window来学习,可以点击官网下载链接进行下载,安装过程 ...

  2. Spring认证中国教育管理中心-Spring Data MongoDB教程五

    原标题:Spring认证中国教育管理中心-Spring Data MongoDB教程五(内容来源:Spring中国教育管理中心) 11.6.5.GeoJSON 支持 MongoDB 支持GeoJSON ...

  3. Spring Data MongoDB示例

    Spring Data MongoDB示例 欢迎使用Spring Data MongoDB示例.Spring Data MongoDB是将Spring Framework与最广泛使用的NoSQL数据库 ...

  4. Spring Data JPA 教程(翻译)

    写那些数据挖掘之类的博文 写的比较累了,现在翻译一下关于spring data jpa的文章,觉得轻松多了. 翻译正文: 你有木有注意到,使用Java持久化的API的数据访问代码包含了很多不必要的模式 ...

  5. mongodb数据库java接口,MongoDB —— 使用Spring Data MongoDB操作数据库

    我们使用Spring Data MongoDB可以方便的在Spring boot项目中操作MongoDB 文档地址:https://docs.spring.io/spring-boot/docs/2. ...

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

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

  7. Spring Data JPA教程

    在Java类或对象与关系数据库之间管理数据是一项非常繁琐且棘手的任务. DAO层通常包含许多样板代码,应简化这些样板代码,以减少代码行数并使代码可重复使用. 在本教程中,我们将讨论Spring数据的J ...

  8. Spring Data Solr教程:将自定义方法添加到单个存储库

    我的Spring Data Solr教程的前一部分教我们如何使用查询方法创建静态查询. 自然而然的下一步将是描述如何使用Spring Data Solr创建动态查询. 但是,在继续讨论该主题之前,我们 ...

  9. Spring Data Solr教程:查询方法

    我们已经了解了如何配置Spring Data Solr. 我们还学习了如何向Solr索引添加新文档,如何更新现有文档的信息以及从Solr索引删除文档. 现在是时候继续前进,学习如何使用Spring D ...

最新文章

  1. 解码以色列人工智能产业:正在崛起的竞争者
  2. MIT公布“著名黑客之死”调查报告
  3. 求列表中个元素的数量
  4. 利用文件摘要简化游戏资源的引用管理
  5. 用第三方工具类,将JavaBean、List、MapString,Object转成JSON文本
  6. 乱序图片 极验_极验验证吴渊:传统图片验证方式已经无效了!
  7. ubuntu下crontab启动,重启,关闭命令
  8. java学习(118):vector类
  9. Bailian3177 判决素数个数【入门】(POJ NOI0113-10)
  10. github上预览Demo网页最简单的方法
  11. [c++] polymorphism without virtual function
  12. Android WAP NET 区别
  13. 台式计算机如何双屏显示,电脑怎么分屏?|台式电脑双显示器连接方法
  14. 输电线缺陷检测 计算机工程与设计,小波去噪和混沌理论应用于输电线缺陷检测-计算机工程与应用.pdf...
  15. WPF 精修篇 滑条
  16. 在windows11上安装cuda,cudnn,以及GPU版的pytorch
  17. leetcode 栈739. 每日温度
  18. 2010互联网第一件大事件——谷歌退出中国内地
  19. 调整变速器后拨详细图文教程
  20. 安全多方计算-入门学习笔记(二)

热门文章

  1. 解决mybatis generator无法覆盖XML
  2. NLP Coursera By Michael Collins - Week1
  3. 这些棘手的Java面试题,答案你都知道吗?
  4. 如何使用jstack分析线程状态
  5. 缓存雪崩,缓存穿透,缓存预热,缓存热备都是什么鬼?
  6. SpringMVC对Ajax请求的处理
  7. 关于文档的基本操作---ElasticSearch
  8. HBase的hbase shell 详解
  9. SparkSQL中UDAF案例分析
  10. Android之Bitmap高效缓存以及android缓存策略