Spring Data MongoDB教程
在当今世界,尽快启动并运行应用程序非常重要。 该应用程序还应该易于开发和维护。
Spring是这样的框架,它提供了与许多不同框架的集成的简便性,这使得使用Spring开发应用程序变得容易。 一种这样的集成是Spring与MongoDB的集成。
1.简介
在本教程中,我们将讨论最著名的Java框架“ Spring”和最著名的NoSQL数据库“ MongoDB”的结合。 MongoDB是一个基于文档的NoSQL数据库,它以JSON之类的结构存储数据。
Spring提供了SpringData和MongoDB的集成,以方便两者的集成,并为开发人员提供便利,而无需为编写用于插入,更新和删除的多个查询而烦恼。
以下是SpringData MongoDB项目提供的一些功能:
- SpringData允许同时使用
@Configuration
类和基于XML的配置。 - Spring的数据访问异常层次结构用于异常的转换。
- Java的POJO和MongoDB的文档之间的集成映射。
-
MongoTemplate
类,可以轻松使用常见的MongoDB操作。 - 除了
MongoTemplate
,MongoReader
和MongoWriter
类还用于低级别的映射。
了解任何技术的最佳方法是实践,我们现在将做同样的事情。
现在让我们做一个简单的程序来详细了解Spring Data MongoDB。
2.技术和工具
让我们看看用于构建程序的技术和工具。
- Eclispe Oxygen.2释放(4.7.2)
- Java –版本9.0.4
- 摇篮– 4.6
- MongoDB服务器– 3.6
- MongoCompass – 3.6
- SpringDataMongoDB – 2.0.5-RELEASE
3.项目结构
我们的项目结构如下图所示。
Gradle项目结构将具有上面显示的项目结构。 如果使用pom.xml,则项目结构将略有不同。
4.计划
作为该计划的一部分,我们将尝试实现以下目标。
- 将对象保存到MongoDB
- 更新MongoDB中的对象
- 从MongoDB中删除对象
- 从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 { @Override public String getDatabaseName() { return "local"; } @Override @Bean public 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; } @Id private 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; } @Override public 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 student Query searchStudent = new Query(Criteria.where(critera).is(value)); // find student based on the query Student 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 student Query 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 Annotation ApplicationContext ctx = new AnnotationConfigApplicationContext(MongoConfig.class); MongoOperations mongoOperation = (MongoOperations) ctx.getBean("mongoTemplate"); MongoDBPOperations ops = new MongoDBPOperations(); Student student = new Student("John", 15); //save student ops.saveStudent(mongoOperation, student); // get student based on search criteria ops.searchStudent(mongoOperation, "studentName", "John"); //update student based on criteria ops.updateStudent(mongoOperation, "StudentName", "John", "studentAge", "18"); // get student based on search criteria ops.searchStudent(mongoOperation, "studentName", "John"); // get all the students ops.getAllStudent(mongoOperation); //remove student based on criteria ops.removeStudent(mongoOperation, "studentName", "John"); // get all the students ops.getAllStudent(mongoOperation); } }
让我们看一下在Application.java
类中执行的分步操作:
- 我们正在创建
ApplicationContext
。 这是由于需要加载配置。 - 另外,创建
MongoOperations
对象以加载MongoTemplate
bean。 -
MongoDBOperations
对象提供对方法的访问,以执行不同的MongoOperation
方法。 - 此外,创建一个名称为John且年龄为15的Student对象。
- 我们正在调用
saveMethod
的MongoDBOperations
,我们将传递必要的参数以将对象保存在数据库中。 - 类似地,我们
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 Annotation ApplicationContext ctx = new AnnotationConfigApplicationContext(MongoConfig.class); MongoOperations mongoOperation = (MongoOperations) ctx.getBean("mongoTemplate"); MongoDBPOperations ops = new MongoDBPOperations(); Student student = new Student("John", 15); //save student ops.saveStudent(mongoOperation, student); // get student based on search criteria ops.searchStudent(mongoOperation, "studentName", "John"); //update student based on criteria ops.updateStudent(mongoOperation, "StudentName", "John", "studentAge", "18"); // get student based on search criteria ops.searchStudent(mongoOperation, "studentName", "John"); // get all the students ops.getAllStudent(mongoOperation); //remove student based on criteria //ops.removeStudent(mongoOperation, "studentName", "John"); // get all the students //ops.getAllStudent(mongoOperation); } }
由于程序更改,让我们重新运行该程序。 以下内容将出现在控制台上。
由于注释了删除命令,MongoDB将存储数据,因此将如下所示。
5.下载Eclipse项目
这是Spring Data MongoDB的一个示例。
翻译自: https://www.javacodegeeks.com/2018/03/spring-data-mongodb-tutorial.html