В современном мире очень важно как можно быстрее запустить и запустить приложение. Приложение также должно быть легко разрабатывать и поддерживать.
Spring — это такой фреймворк, который обеспечивает простоту интеграции с множеством различных фреймворков, что облегчает разработку приложения с использованием Spring. Одной из таких интеграций является интеграция Spring с MongoDB.
1. Введение
В этом уроке мы обсудим комбинацию наиболее известного Java-фреймворка «Spring» и самой известной базы данных NoSQL «MongoDB». MongoDB является базой данных NoSQL на основе документов, которая хранит данные в JSON-подобной структуре.
SpringData и MongoDB обеспечивают интеграцию Spring для легкой интеграции двух и для обеспечения простоты для разработчиков, не беспокоясь о написании нескольких запросов на вставку, обновление и удаление.
Ниже приведены некоторые функции, предоставляемые проектом SpringData MongoDB:
- SpringData позволяет использовать класс
@Configuration
и конфигурацию на основе XML. - Доступ к данным Иерархия исключений Spring используется для перевода исключений.
- Интегрированное отображение между Java POJO и документом MongoDB.
- Класс
MongoTemplate
который позволяет легко использовать обычные операции MongoDB. - В дополнение к
MongoTemplate
,MongoReader
иMongoWriter
для низкого уровня отображения.
Лучший способ понять любую технологию — это практиковать ее, и мы собираемся сделать то же самое сейчас.
Теперь давайте создадим простую программу для более детального понимания Spring Data MongoDB.
2. Технологии и инструменты
Давайте посмотрим на технологии и инструменты, используемые для создания программы.
- Eclispe Oxygen.2 Release (4.7.2)
- Java — версия 9.0.4
- Gradle — 4.6
- Сервер MongoDB — 3,6
- МонгоКомпас — 3,6
- SpringDataMongoDB — 2.0.5-RELEASE
3. Структура проекта
Структура нашего проекта будет выглядеть так, как показано ниже.
Структура проекта Gradle будет иметь вышеуказанную структуру проекта. В случае pom.xml структура проекта будет немного отличаться.
4. Программа
В рамках этой программы мы постараемся достичь нижеуказанных целей.
- Сохранить объект в MongoDB
- Обновить объект в MongoDB
- Удалить объект из MongoDB
- Получить все объекты из MongoDB
Давайте теперь разберемся во всех компонентах программы. Прежде всего мы начнем с зависимостей программы и фляг, которые необходимы для программы.
4.1 Gradle
Мы используем Gradle для сборки как часть программы. Файл build.gradle
будет выглядеть так, как показано ниже.
build.gradle
01
02
03
04
05
06
07
08
09
10
|
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
для jcenter
соответствующих jcenter
зависимостей.
Тег dependencies {}
используется для предоставления необходимых сведений о файле jar, которые необходимо извлечь для проекта.
4.2 Конфигурация для MongoDB
Чтобы использовать конфигурацию MongoDB, нам нужно реализовать класс AbstractMongoConfiguration
. Класс MongoConfig.java
будет выглядеть так, как показано ниже. Здесь мы используем аннотации вместо xml. Но даже XML также можно использовать для настройки конфигурации.
Реализация класса MongoConfig.java
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
|
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
компонент MongoClient
.
4.3 Модельный класс
Теперь посмотрим на модель класса. В качестве модельного класса мы используем student.java
который содержит атрибуты для Student, такие как Name и age. Student.java
модели Student.java
используется для отображения POJO в коллекцию MongoDB.
Модельный класс для ученика
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
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
определяет документ. Коллекция свойств определяет коллекцию, которая будет использоваться для сопоставления с коллекцией. Все атрибуты, которые упоминаются как часть коллекции, должны быть доступны в классе POJO. @Id
определяет идентификатор коллекции.
4.4 CRUD-операции
Для выполнения операций CRUD, таких как сохранение данных, обновление данных, удаление данных и получение данных из MongoDB, мы будем использовать MongoOperations
.
Теперь давайте посмотрим на класс MongoDBPOperations.java
. Этот класс содержит реализацию для всех методов операций CRUD.
Класс MongoDBPOperations, который будет использоваться для выполнения операций CRUD
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
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
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
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
компонентаMongoTemplate
. - Объект
MongoDBOperations
предоставляет доступ к методам для выполнения различных методовMongoOperation
. - Кроме того, создайте объект Student с именем John and Age как 15.
- Мы вызываем
saveMethod
MongoDBOperations
и передадим необходимые параметры для сохранения объекта в базе данных. - Точно так же мы вызываем различные методы
MongoDBOperations
один за другим.
4.6 Запустите программу
Наконец, давайте теперь запустим программу как Java-приложение. Щелкните правой кнопкой мыши Application.java -> Запуск от имени -> Java-приложение.
Следующий результат появится на консоли.
Теперь давайте прокомментируем команду для удаления объекта. MongoDB успешно сохранит данные.
Кроме того, давайте прокомментируем строку для удаления объекта, как показано ниже.
Класс приложения после комментирования удалить методы
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
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.