Проект Spring Data позволяет упростить взаимодействие Spring-приложений с источниками данных, в частности с популярной NoSQL базой MongoDB.
В современном мире очень важно создать и запустить приложение как можно скорее. Также приложение должно быть простым в разработке и легко поддерживаться.
Spring – как раз такой фреймворк, который обеспечивает простоту интеграции со множеством других различных фреймворков, что упрощает разработку приложения с использованием Spring. Одной из таких интеграций является интеграция Spring с MongoDB.
☕ Подтянуть свои знания по Java вы можете на нашем телеграм-канале «Библиотека Java для собеса»
Проверить свои знания разработки на Spring Framework
В этом уроке мы обсудим комбинацию самого известного java-фреймворка «Spring» и самой известной NoSQL системы управления базами данных (СУБД) «MongoDB». MongoDB – это документоориентированная NoSQL СУБД, которая хранит данные в JSON-подобном формате.
Интеграция Spring Data и MongoDB предоставляется Spring для облегчения взаимодействия обоих и удобства разработчиков, избавляя от необходимости написания множества запросов для вставки, обновления и удаления.
Ниже приведены некоторые из возможностей, предоставляемых проектом Spring Data MongoDB:
- Spring Data позволяет использовать как класс @Configuration, так и XML-конфигурацию.
- Иерархия исключений Data Access Spring используется для трансляции исключения.
- Интегрированное сопоставление между Java POJO и документом MongoDB.
- Класс MongoTemplate, который упрощает использование распространенных операций MongoDB.
- В дополнение к MongoTemplate, можно использовать классы MongoReader и MongoWriter для низкоуровневого отображения.
Лучший способ понять любую технологию – это использовать ее на практике, и это именно то, что мы собираемся сейчас сделать.
Давайте создадим простую программу, чтобы подробно ознакомиться со Spring Data MongoDB.
🧩☕ Интересные задачи по Java для практики можно найти на нашем телеграм-канале «Библиотека задач по Java»
Технологии и инструменты
Посмотрим на технологии и инструменты, которые мы будем использовать для создания программы.
- Eclispe Oxygen.2 Release (4.7.2);
- Java – версия 9.0.4;
- Gradle – 4.6;
- MongoDB server – 3.6;
- MongoCompass – 3.6;
- SpringDataMongoDB – 2.0.5-RELEASE.
Структура проекта
Структура нашего проекта будет выглядеть так, как показано ниже.
Gradle-проект будет иметь структуру, показанную выше. В случае pom.xml структура проекта будет немного отличаться.
Программа
В рамках этой программы мы постараемся выполнить нижеуказанные задачи.
- Сохранение объекта в MongoDB.
- Обновление объекта в MongoDB.
- Удаление объекта из MongoDB.
- Получение всех объектов из MongoDB.
Давайте теперь разберем все компоненты программы. Прежде всего, мы начнем с зависимостей и jar-файлов, необходимых для программы.
Gradle
Мы используем 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
, чтобы подтянуть зависимые jar-файлы. Мы также можем использовать jcenter для подтягивания соответствующих зависимых jar-файлов.
Тег dependencies {}
используются для предоставления необходимых данных о jar-файлах, которые нужно подтянуть для проекта.
Конфигурация для Spring Data 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
.
Класс модели
Теперь рассмотрим класс модели. Мы используем student.java
в качестве класса модели, который содержит атрибуты для Student
, такие как Name
и Age
. Класс модели Student.java
используется для отображения POJO в коллекцию MongoDB
Класс модели Student:
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
определяет идентификатор коллекции.
CRUD-операции
Чтобы выполнять операции CRUD (сокр. от create, read, update, delete), такие как сохранение, обновление, удаление и получение данных из MongoDB, мы будем использовать 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
.
Класс приложения
Главным классом, который содержит метод 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
. - Объект
MongoDBOperations
предоставляет доступ к методам выполнения различных операцийMongoOperation
. - Создан объект Student с именем John и возрастом 15.
- Мы вызываем метод
saveMethod
классаMongoDBOperations
и передаем необходимые параметры для сохранения объекта в базе данных. - Точно так же мы вызываем различные методы
MongoDBOperations
один за другим.
Запуск программы
Наконец, давайте теперь запустим программу как 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 будет хранить данные и, следовательно, выглядеть, как показано ниже:
Скачайте Eclipse-проект
Это был пример Spring Data MongoDB.
Вы можете скачать весь исходный код этого примера здесь.
Комментарии