Статьи

Учебник по Spring Data MongoDB

В современном мире очень важно как можно быстрее запустить и запустить приложение. Приложение также должно быть легко разрабатывать и поддерживать.

Spring — это такой фреймворк, который обеспечивает простоту интеграции с множеством различных фреймворков, что облегчает разработку приложения с использованием Spring. Одной из таких интеграций является интеграция Spring с MongoDB.

1. Введение

В этом уроке мы обсудим комбинацию наиболее известного Java-фреймворка «Spring» и самой известной базы данных NoSQL «MongoDB». MongoDB является базой данных NoSQL на основе документов, которая хранит данные в JSON-подобной структуре.

SpringData и MongoDB обеспечивают интеграцию Spring для легкой интеграции двух и для обеспечения простоты для разработчиков, не беспокоясь о написании нескольких запросов на вставку, обновление и удаление.

Ниже приведены некоторые функции, предоставляемые проектом SpringData MongoDB:

  1. SpringData позволяет использовать класс @Configuration и конфигурацию на основе XML.
  2. Доступ к данным Иерархия исключений Spring используется для перевода исключений.
  3. Интегрированное отображение между Java POJO и документом MongoDB.
  4. Класс MongoTemplate который позволяет легко использовать обычные операции MongoDB.
  5. В дополнение к MongoTemplate , MongoReader и MongoWriter для низкого уровня отображения.

Лучший способ понять любую технологию — это практиковать ее, и мы собираемся сделать то же самое сейчас.

Теперь давайте создадим простую программу для более детального понимания Spring Data MongoDB.

2. Технологии и инструменты

Давайте посмотрим на технологии и инструменты, используемые для создания программы.

  1. Eclispe Oxygen.2 Release (4.7.2)
  2. Java — версия 9.0.4
  3. Gradle — 4.6
  4. Сервер MongoDB — 3,6
  5. МонгоКомпас — 3,6
  6. SpringDataMongoDB — 2.0.5-RELEASE

3. Структура проекта

Структура нашего проекта будет выглядеть так, как показано ниже.

Структура проекта для SpringDataMongoDB

Структура проекта Gradle будет иметь вышеуказанную структуру проекта. В случае pom.xml структура проекта будет немного отличаться.

4. Программа

В рамках этой программы мы постараемся достичь нижеуказанных целей.

  1. Сохранить объект в MongoDB
  2. Обновить объект в MongoDB
  3. Удалить объект из MongoDB
  4. Получить все объекты из 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 :

  1. Мы создаем ApplicationContext . Это связано с необходимостью загрузки конфигурации.
  2. Кроме того, объект MongoOperations создается для загрузки MongoTemplate компонента MongoTemplate .
  3. Объект MongoDBOperations предоставляет доступ к методам для выполнения различных методов MongoOperation .
  4. Кроме того, создайте объект Student с именем John and Age как 15.
  5. Мы вызываем saveMethod MongoDBOperations и передадим необходимые параметры для сохранения объекта в базе данных.
  6. Точно так же мы вызываем различные методы 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 сохранит данные и, следовательно, будет выглядеть так, как показано ниже.

Выход MongoDB после команды сохранения и обновления

5. Загрузите проект Eclipse

Это был пример Spring Data MongoDB.

Скачать
Вы можете скачать полный исходный код этого примера здесь: SpringDataMongoDBTutorial.zip