Рубрики
Без рубрики

Пример приложения Spring Boot CRUD с MongoDB

Введение В этом посте я покажу, как мы можем использовать Spring Boot для создания простого CRUD R… Помеченный spring, java, mongodb, gradle.

Вступление

В этом посте я покажу, как мы можем использовать Spring Boot для создания простого примера приложения CRUD REST с MongoDB. Я знаю, что ваш первый вопрос будет таким: что такое MongoDB?

Что такое MongoDB?

MongoDB – это база данных документов NoSQL. В этой базе данных записи – это документы, которые ведут себя во многом как объекты JSON. Так что в основном это пара ключ-значение.

Ключевыми преимуществами использования MongoDB в качестве базы данных являются:

  • MongoDB – это база данных документов без схем. В одной коллекции хранятся разные документы.
  • В одной коллекции хранятся разные документы.
  • В одной коллекции хранятся разные документы.
  • В одной коллекции хранятся разные документы.
  • В одной коллекции хранятся разные документы.

В одной коллекции хранятся разные документы.

  • В одной коллекции хранятся разные документы.
  • В одной коллекции хранятся разные документы.
  • В одной коллекции хранятся разные документы. В одной коллекции хранятся разные документы.
  • В одной коллекции хранятся разные документы.
  • В одной коллекции хранятся разные документы.

В одной коллекции хранятся разные документы.

В одной коллекции хранятся разные документы.

  • В одной коллекции хранятся разные документы.
  • В одной коллекции хранятся разные документы.
  • В одной коллекции хранятся разные документы.
  • В одной коллекции хранятся разные документы.

В одной коллекции хранятся разные документы.

В одной коллекции хранятся разные документы.

В одной коллекции хранятся разные документы.

  • В одной коллекции хранятся разные документы.
  • В одной коллекции хранятся разные документы.
  • В одной коллекции хранятся разные документы.
  • В одной коллекции хранятся разные документы.
  • В одной коллекции хранятся разные документы.
  • В одной коллекции хранятся разные документы.
  • В одной коллекции хранятся разные документы.
  • В одной коллекции хранятся разные документы. В одной коллекции хранятся разные документы.

В одной коллекции хранятся разные документы.

В одной коллекции хранятся разные документы. В одной коллекции хранятся разные документы.

implementation 'org.springframework.boot:spring-boot-starter-data-mongodb'
implementation 'org.springframework.boot:spring-boot-starter-web'

В одной коллекции хранятся разные документы. В одной коллекции хранятся разные документы. В одной коллекции хранятся разные документы.

spring.data.mongodb.host = localhost
spring.data.mongodb.port=27017
spring.data.mongodb.database=library

В одной коллекции хранятся разные документы. В одной коллекции хранятся разные документы.

В одной коллекции хранятся разные документы.

В одной коллекции хранятся разные документы. В одной коллекции хранятся разные документы. В одной коллекции хранятся разные документы. В одной коллекции хранятся разные документы.

package com.betterjavacode.mongodbdemo.mongodbapp.models;

import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;



@Document(collection = "books")
public class Book
{
    @Id
    private String id;

    private String title;
    private String author;
    private String isbn;

    public Book()
    {

    }

    public Book(String title, String author, String isbn)
    {
        this.title = title;
        this.author = author;
        this.isbn = isbn;
    }

    public String getId ()
    {
        return id;
    }

    public void setId (String id)
    {
        this.id = id;
    }

    public String getTitle ()
    {
        return title;
    }

    public void setTitle (String title)
    {
        this.title = title;
    }

    public String getAuthor ()
    {
        return author;
    }

    public void setAuthor (String author)
    {
        this.author = author;
    }

    public String getIsbn ()
    {
        return isbn;
    }

    public void setIsbn (String isbn)
    {
        this.isbn = isbn;
    }
}

В одной коллекции хранятся разные документы.

В одной коллекции хранятся разные документы.

В одной коллекции хранятся разные документы. В одной коллекции хранятся разные документы. В одной коллекции хранятся разные документы.

package com.betterjavacode.mongodbdemo.mongodbapp.repositories;

import com.betterjavacode.mongodbdemo.mongodbapp.models.Book;
import org.springframework.data.mongodb.repository.MongoRepository;

import java.util.List;

public interface BookRepository extends MongoRepository
{
    List findByTitleContaining(String title);
    List findByAuthor(String name);
}

В одной коллекции хранятся разные документы.

В одной коллекции хранятся разные документы.

В одной коллекции хранятся разные документы. В одной коллекции хранятся разные документы. В одной коллекции хранятся разные документы. В одной коллекции хранятся разные документы. В одной коллекции хранятся разные документы.

package com.betterjavacode.mongodbdemo.mongodbapp.controller;

import com.betterjavacode.mongodbdemo.mongodbapp.models.Book;
import com.betterjavacode.mongodbdemo.mongodbapp.repositories.BookRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

@CrossOrigin("http://localhost:8080")
@RestController
@RequestMapping("/v1/mongodbapp")
public class BookController
{
    @Autowired
    BookRepository bookRepository;

    @GetMapping("/books")
    public ResponseEntity getAllBooks(@RequestParam(required = false) String bookTitle)
    {
        try
        {
            List listOfBooks = new ArrayList<>();
            if(bookTitle == null || bookTitle.isEmpty())
            {
                bookRepository.findAll().forEach(listOfBooks::add);
            }
            else
            {
                bookRepository.findByTitleContaining(bookTitle).forEach(listOfBooks::add);
            }

            if(listOfBooks.isEmpty())
            {
                return new ResponseEntity<>(HttpStatus.NO_CONTENT);
            }

            return new ResponseEntity<>(listOfBooks, HttpStatus.OK);
        }
        catch (Exception e)
        {
            return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR);
        }
    }

    @GetMapping("/books/{id}")
    public ResponseEntity getBookById(@PathVariable("id") String id)
    {
        try
        {
            Optional bookOptional = bookRepository.findById(id);

            return new ResponseEntity<>(bookOptional.get(), HttpStatus.OK);
        }
        catch (Exception e)
        {
            return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR);
        }
    }

    @PostMapping("/books")
    public ResponseEntity addABookToLibrary(@RequestBody Book book)
    {
        try
        {
            Book createdBook = bookRepository.save(new Book(book.getTitle(), book.getAuthor(),
                    book.getIsbn()));
            return new ResponseEntity<>(createdBook, HttpStatus.CREATED);
        }
        catch (Exception e)
        {
            return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR);
        }
    }

    @PutMapping("/books/{id}")
    public ResponseEntity updateABook(@PathVariable("id") String id, @RequestBody Book book)
    {
        Optional bookOptional = bookRepository.findById(id);

        if(bookOptional.isPresent())
        {
            Book updatedBook = bookOptional.get();
            updatedBook.setTitle(book.getTitle());
            updatedBook.setAuthor(book.getAuthor());
            updatedBook.setIsbn(book.getIsbn());
            return new ResponseEntity<>(bookRepository.save(updatedBook), HttpStatus.OK);
        }
        else
        {
            return new ResponseEntity<>(HttpStatus.NOT_FOUND);
        }
    }

    @DeleteMapping("/books/{id}")
    public ResponseEntity deleteABook(@PathVariable("id") String id)
    {
        try
        {
            bookRepository.deleteById(id);
            return new ResponseEntity<>(HttpStatus.NO_CONTENT);
        }
        catch (Exception e)
        {
            return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
        }
    }
}


В одной коллекции хранятся разные документы. В одной коллекции хранятся разные документы.

* @RestController – to mark this as a REST controller.

  • @CrossOrigin – This annotation allows cross-origin resource sharing (CORS). This will add CORS access control headers in the REST response. These headers are necessary because it allows servers to specify not only who can access the resources, but how they can be accessed.
  • We have added different methods – addABookToLibrary adds the book to database, getAllBooks retrieves the book from database.

В одной коллекции хранятся разные документы.

В одной коллекции хранятся разные документы. В одной коллекции хранятся разные документы.

В одной коллекции хранятся разные документы. В одной коллекции хранятся разные документы. После сборки вы можете запустить программу следующим образом:

java -jar mongodbapp-0.0.1-SNAPSHOT.jar .

Давайте воспользуемся ПОЧТАЛЬОНОМ, чтобы добавить книги в нашу библиотеку.

Как показано выше, мы добавили книгу, и в ответе показана добавленная книга в базе данных.

Следующий API – это GET API для получения всех книг из базы данных.

Теперь, чтобы показать удаление книги из библиотеки, мы будем использовать DELETE API.

Код для этого примера приложения доступен в моем репозитории github .

Если вы хотите просмотреть эти данные в базе данных MongoDB, вы можете получить доступ к инструменту MongoDB compass и получить доступ к коллекционным книгам в базе данных библиотеки.

Вывод

В этом посте я показал, как использовать Spring Boot для создания REST API при использовании базы данных MongoDB. Подход, который мы использовали, очень похож на тот, который мы используем при использовании обычной базы данных SQL. Есть некоторые изменения, которые мы должны добавить при использовании базы данных NoSQL. Если вы считаете этот пост полезным или у вас есть какие-либо вопросы, с которыми я могу вам помочь, вы можете подписаться на мой блог здесь .

Оригинал: “https://dev.to/betterjavacode/spring-boot-crud-application-example-with-mongodb-5dl1”