MongoDB의 Spring Boot CRUD 응용 프로그램 사용 예

소개하다.


이 문서에서 Spring Boot을 사용하여MongoDB를 사용하여 간단한 CRUD REST 응용 프로그램 예시를 구축하는 방법을 보여 드리겠습니다.첫 번째 질문이 뭔지 알아요. 몬godb?

MongodB란?


MongoDB는 NosQL 문서 데이터베이스입니다.이 데이터베이스에서 레코드는 JSON 객체와 매우 유사한 동작의 문서입니다.그래서 주로 키 값이 맞습니다.
MongoDB를 데이터베이스로 사용하는 주요 이점은 다음과 같습니다.
  • MongoDB는 무모드의 문서 데이터베이스이다.하나의 집합은 서로 다른 문서를 포함한다.
  • 단일 물체의 구조가 뚜렷하다.
  • 복잡한 연결이 없습니다.
  • 깊이 조회 능력.
  • 손쉬운 확장
  • 다음은 기업 응용 프로그램에서 MongoDB 또는 NosQL 데이터베이스와 유사한 몇 가지 이유입니다.
  • 더 빠른 JSON 스타일 데이터 검색이 필요한 경우
  • 속성에 색인 추가 용이
  • 분할의 목적인 분할은 여러 대의 기계에 걸쳐 데이터를 저장하는 과정이다.여러 대의 기계에 걸쳐 데이터를 저장할 때, 통상적으로 일부 표준에 따라 이 데이터를 구분한다.
  • 신속한 현장 업데이트
  • 더 쉬운 조회
  • 선결 조건


    이 예제 응용 프로그램을 만들려면 다음이 필요합니다.
  • 스프링 커버(버전 2.4.1)
  • MongoDB
  • 그라델
  • 자바
  • Spring Boot CRUD 응용 프로그램


    이 문서의 일부로 REST CRUD 응용 프로그램을 구축합니다.
    여기에는 다음이 포함됩니다.
  • 도서 라이브러리 - MongoDB 데이터베이스에 장서 라이브러리를 만들 것입니다.
  • 저자별로 책을 보관하는 도서관
  • 사용자는 REST API를 호출하여 작성자의 책을 검색할 수 있음
  • 사용자는 REST API를 호출하여 도서관에서 모든 책을 검색할 수 있음
  • 발표 –/v1/mongodbapp/books - 도서관에 책 한 권 추가
  • GET –/v1/mongodbapp/books –
    도서관
  • 획득 –/v1/mongodbapp/books/id - 특정 서적 검색
  • 삭제 –/v1/mongodbapp/books/id - 라이브러리에서 책 한 권 삭제
  • MongodB에서 Spring Boot CRUD를 사용하는 방법


    이 프로그램을 만들기 위해서, 의존 관계를 처리하고 프로그램을 구축하려면gradle을 사용하십시오.Spring Boot 응용 프로그램에 다음 종속성을 추가합니다.
    implementation 'org.springframework.boot:spring-boot-starter-data-mongodb'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    
    
    이 의존항이 생기면 몬godb 데이터베이스에 연결할 수 있습니다.그러나 우리는 여전히 데이터베이스가 있는 위치를 추가해야 한다.다음과 같이 application.properties 파일에 필요한 속성을 추가합니다.
    spring.data.mongodb.host = localhost
    spring.data.mongodb.port=27017
    spring.data.mongodb.database=library
    
    
    포트27017에 있는 호스트localhost에서 실행되는MongoDB 데이터베이스에 연결할 수 있습니다. 데이터베이스 모드는library입니다.

    정의 데이터 모델


    도서관의 일부로서 우리는 책이 필요하다.그래서 우리의 주요 데이터 대상은 책이다.이 방면의 데이터 모델에는 책 제목, 저자, ISBN이 포함될 것이다.구체적으로 다음과 같다.
    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;
        }
    }
    
    
    우리가 사용한 것은 몬고 DB이기 때문에 @Document 주석이 장서를 덮어썼다.

    라이브러리 인터페이스 추가


    도서 대상을 가져오거나 저장하거나 삭제할 수 있는 저장소 인터페이스가 필요합니다.repositories 패키지에 BookRepository 인터페이스를 추가합니다.
    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<Book, String>
    {
        List findByTitleContaining(String title);
        List findByAuthor(String name);
    }
    
    
    이 저장소는 제목이나 저자의 이름에 따라 도서 목록을 얻을 수 있는 두 가지 방법이 있다.

    Spring REST API 컨트롤러 추가


    이제 우리 프로그램이 REST CRUD가 되도록 REST 컨트롤러를 추가합니다.이 컨트롤러에는 POST, PUT, GETDELETE API가 포함됩니다.
    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<List> 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);
            }
        }
    }
    
    
    
    BookController는 REST 컨트롤러 클래스입니다.포함
    * @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.

    완벽한 프레젠테이션


    REST 디렉터, 라이브러리 메소드가 추가되었으며, 이 프로그램을 구축하고 실행할 것입니다.프레젠테이션의 일부로 POSTMAN을 사용하여 API에 액세스합니다.
    명령줄이나 사용 중인 코드 편집기에서 프로그램을 만들 수 있습니다.나는 명령행을 더 좋아해서 프로그램을 구축했다.구축 후 프로그램을 다음과 같이 실행할 수 있습니다.java -jar mongodbapp-0.0.1-SNAPSHOT.jar.우리 우체부로 우리 도서관에 책을 더 보냅시다.

    위에서 보듯이, 우리는 데이터베이스에 추가된 책을 표시하는 데 응답하는 책을 추가했다.
    다음 API는 데이터베이스에서 모든 책을 가져오는 GET API입니다.

    라이브러리에서 삭제된 도서를 표시하려면 delete API를 사용합니다.

    이 예시 프로그램의 코드는 mygithub repository에서 제공됩니다.
    MongoDB 데이터베이스에서 이 데이터를 보려면 MongoDB compass 도구를 방문하고 도서관 데이터베이스에 있는 장서를 방문할 수 있습니다.

    결론


    본고에서 MongoDB 데이터베이스를 사용할 때 Spring Boot을 사용하여 REST API를 만드는 방법을 보여 드리겠습니다.우리가 사용하는 방법은 일반적인 SQL 데이터베이스를 사용할 때의 방법과 매우 비슷하다.NoSQL 데이터베이스를 사용할 때 변경 사항을 추가해야 합니다.만약 당신이 이 글이 유용하다고 생각하거나 문제가 있다면 내가 당신을 도울 수 있습니다. 당신은 나의 블로그here를 구독할 수 있습니다.

    좋은 웹페이지 즐겨찾기