Spring Data MongoDB教程

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/348123.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

arm 交叉编译找不到so_嵌入式杂谈之交叉编译

这次扯一下嵌入式开发过程中经常用到的交叉编译器,虽说在之前的文章也提到过这个问题,不过上次是着重介绍为什么使用交叉编译器(主要是为了劝服自己从单片机的思想中脱离出来,慢慢的接受嵌入式Linux开发的一些约定俗成的工具与方法)&#xff…

Java 10将如何改变您的编码方式

突出显示Java 10中新的Java局部变量类型推断功能 早在2016年,Java社区就掀起了新的JDK增强提案(JEP): JEP 286 。 现在,两年后,局部变量类型推断可以说是Java 10中最值得注意的功能。这是Java语言开发人员…

中兴zxr10路由器重启命令_蒲公英路由器刷第三方固件(一)

蒲公英路由器是由上海贝锐信息科技股份有限公司(oray)在2015年10月14日推出的一款路由器。它是一款采用VPC[3]技术实现智能组网的路由器。2台或多台使用,无需公网IP,能将异地局域网通过蒲公英组建成一个网络。这次刷固件的教程为蒲公英路由器x3/x3pro刷第…

Spring Cloud Netflix尤里卡

本教程是关于Spring云Netflix Eureka的。 在这里,我们将创建eureka发现服务器和微服务,这些服务本身将注册到发现服务器和使用netflix客户端API的客户端中,以使用示例示例来发现服务并使用该服务公开的微服务。因此,我们将开发每个…

掘进循环作业图表_Word版本。煤矿安全生产标准化评分方法(2020)8.4 掘进

注:以下内容来自于网络,若有侵权请联系QQ3609400292进行删除。煤矿安全生产标准化管理体系基本要求及评分方法(试行)8.4 掘 进一、工作要求(风险管控)1.生产组织(1)煤巷、半煤岩巷宜采用综合机械化掘进,综合机械化程度不低于50%,并持续提…

hide show vue 动画_jQuery动画效果

-------------------------------------------------------------------------------------------------------1. 隐藏和显示show()方法和hide()方法是jQuery中最基本的动画方法。在HTML文档里,为一个元素调用hide()方法,会将该元素的display样式改为“n…

润乾报表分组求和_一招搞定各种报表合计需求

一、常用合计方案在有专业报表工具之前,常用的实现方案有:1) SQL“select sum(字段) from 表 group by 字段 order by 字段“可以实现简单的分组数据合计、条件合计,这种方式有一个很明显的缺点,就是随着合计需求复杂度…

Spring Security 6.x 系列(12)—— Form表单认证登录注销自定义配置

一、前言 在本系列文章中介绍了 Form 表单认证和注销流程,对部分源码也进行详细分析。 本章主要学习 Spring Security 中表单认证登录注销的相关自定义配置。 二、自定义登录页面 Spring Security 表单认证默认规则中对未认证的请求会重定向到默认登录页面&…

中奖名单模板_春分纪中奖名单出炉~才艺主公用“树叶阵法”致敬率土!

在上周发起的“率土春分纪”活动里小率每天都能在后台中收获主公们的“春天故事”今天小率将优质投稿整理出来分享给各位主公1春分诗词春赋雨水以将兮,天微微复日暖;春分之临兮,地脉脉而野苏。美好触手可及,万事恰逢转机。且看柳嫩…

JDK 10的摘要Javadoc标签

JDK 10通过发行JDK-8173425 引入了Javadoc标签{summary} (“ Javadoc需要一个新标签来指定摘要。”)。 这个新标签允许开发人员显式指定Javadoc注释的哪些部分出现在“摘要”中,而不是依靠Javadoc的默认处理来寻找一个时间和空间来划定注释的…

用c语言写代码_如何避免用动态语言的思维写Go代码

由于招聘市场上Go工程师的供给量不足,所以在招人的时候我们招了不少愿意转型用Go语言进行开发的PHP工程师,不过虽说换了个语言,在他们代码的时候还是能发现很多PHP的影子。if语句后面非要带括号这种问题就不说了,这属于不懂事&…

java ee cdi_Java EE CDI依赖关系消歧示例

java ee cdi在本教程中,我们将向您展示如何避免CDI bean中的依赖关系消除歧义。 在CDI中,我们可以为应用程序中不同客户端的接口的多个实现实现依赖项注入。 依赖性消除歧义的问题是客户端如何在不同的实现中调用特定的实现,而不会发生任何错…

tfw文件如何导入cad_教你三维家3d设计软件如何导入cad文件

一、导入CAD户型图的,注意点:CAD图要求:除墙体外,其它线段不可出现,(如:门、柱子、窗、阳台、标注、家具、植物、摆件等)且墙体线条要闭合,保存DXF格式。第一步:点击户型图--本地上传CAD图。第二…

同级选择器_10-CSS3选择器详解

CSS3在CSS2基础上,增强或新增了许多特性, 弥补了CSS2的众多不足之处,使得Web开发变得更为高效和便捷。CSS3的现状浏览器支持程度不够好,有些需要添加私有前缀移动端支持优于PC端不断改进中应用相对广泛应对的策略:渐进…

存储限制_明年6月份开始,谷歌相册将终止免费无限存储服务

站长之家(ChinaZ.com)11月12日 消息:在提供免费服务5年后,谷歌对外宣布将终止提供无限容量免费照片存储服务,转而只提供的15GB免费存储空间,超过部分就需要向谷歌付费。这一变化将于2021年6月1日生效,这意味着如果用户上传的照片超…

Maven,Eclipse和Java 9

任何在eclipse中使用M2E(maven-to-eclipse)插件的人都知道您在哪里运行构建的问题,然后在项目上更新maven只是让它重置JRE并抛出一堆项目错误! 我在使用Open Liberty与Java 9一起运行Java EE 8的帖子中注意到了这个问题 解决方案…

6000毫安以上智能手机_三星超长续航神机,6000毫安+128GB,上市半年不到跌至1499...

现在的手机是越来越智能了,无论是苹果还是安卓,基本都能为用户的生活添加几分乐趣,因为,当我们感到无聊时,基本都可以通过智能手机来打发时间。据我所知,不少人在用智能手机时都有个困扰,就是续…

使用RabbitMQ进行消息传递

RabbitMQ是一个强大的消息代理,可用于实现不同的消息传递模式。 即使有出色的教程 (使用不同的语言和框架),也很难理解这些概念。 在这篇文章中,我想展示一些可以用RabbitMQ实现的不同范例,以及为什么要为某…

android 为什么fragment在调用hide方法后没有生效_Android 多 Fragment 切换优化

code小生,一个专注 Android 领域的技术平台公众号回复 Android 加入我的安卓技术群作者:DDDong丶链接:https://www.jianshu.com/p/c8e8a0249911声明:本文已获DDDong丶授权发表,转发等请联系原作者授权问题分析一直在简书里看别人的…

mysql如何查看远程用户_MySQL系列(十)--用户权限及远程访问

本文基于MySQL8.0,记录一下完整的远程访问的过程,以及这个过程中可能遇到的问题,MySQL运行在阿里云服务器,操作系统:CentOS 7.6 64位顺便说下,买服务器还是要双十二这种拉新活动再买,用一个新的…