Ubuntu 18.04에서 MySQL 컨테이너로 CRUD Spring Boot JPA를 구축하는 방법

11722 단어

안내


이 문서에서는 docker compose 파일을 작성하여 MySQL 데이터베이스 컨테이너와 연결하여 간단한 백엔드 응용 프로그램을 구축할 수 있는 Spring Boot JPA를 이해할 수 있습니다.Spring Data JPA는 개발 속도를 높이고 비즈니스 논리에 집중할 수 있는 좋은 선택입니다.
이 강좌에서 학습할 수 있는 기술:
  • 스프링 부츠 JPA
  • MySQL을 위한 Docker Compose
  • 구축
  • 간단한 때밀기 조작
    구현 도구 지원:
  • 인코딩용 IDE Intellij
  • 우편배달부, HTTP 요청 처리용
  • MySQL 컨테이너를 구축하는 데 사용되는 Docker와 Docker ComposeUbuntu 18.04Install Docker on Ubuntu 18,04,Install Docker Compose on Ubuntu 18.04에서 더 많은 설치 정보를 읽을 수 있습니다.
  • 여기에 GitHub 저장소가 있음blog repository
    비디오 인코딩 참조

    둘구현


    1단계: 초기 프로젝트 Spring Boot Maven

  • 이 프로젝트에서 저는 Maven을 사용할 것입니다.Maven은 Java 프로젝트에 주로 사용되는 구축 자동화 도구입니다.
  • Intellij를 열고 Spring 초기값 설정 항목 편집 이름 항목을 선택한 다음 프로젝트 SDK, Java 버전을 선택합니다.

    Option you can create project on website at here, click download and extract import project by Intellij.


  • 초기 프로젝트인 Spring 데이터 JPA, Spring 웹 및 MySQL 드라이버를 탐색할 때 의존 항목을 추가할 수 있습니다.혹은pom 파일에 매뉴얼을 추가합니다.xml.
  • POM 또는 프로젝트 객체 모델입니다.이것은 마븐의 기본 작업 단원이다.이것은 Maven이 사용하는 항목과 설정에 대한 상세한 정보를 포함하는 XML 파일입니다. 더 자세한 정보at here를 보십시오.
  •  <dependency>
            <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-jpa</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <scope>runtime</scope>
            </dependency>
     </dependency>
    
    의존 관계의 경우 XML 형식을 볼 수 있습니다.명명 규칙은 다음과 같습니다.

  • groupId: 프로젝트 또는 조직의 고유한 식별 이름입니다.

  • artifactId: 항목의 고유한 이름입니다.그것은 소포에 관한 것이다.

  • 버전: 프로젝트의 버전입니다.

  • 범위: 독립된 특정 범위.사용 가능한 범위는 다음과 같습니다.

  • 컴파일: 특정한 역할 영역을 제공하지 않았을 때 기본값입니다.

  • 제공: 의존 항목은 실행할 때 JDK나 용기에서 제공해야 합니다.

  • 실행할 때: 실행할 때 이 범위의 의존항이 필요합니다.

  • 테스트: 테스트는 전달할 수 없고 테스트와 실행 클래스 경로에만 존재합니다.

  • 시스템: 범위는 제공된 범위와 유사합니다.다른 점은 시스템이 우리에게 시스템에 있는 특정한jar를 직접 가리키도록 요구하는 데 있다.
  • 2단계: docker compose 구현.파일을 사용하여 MySQL 시작


    MySQL 컨테이너를 실행하기 위해 루트 프로젝트에 파일docker-compose.file을 생성합니다.

  • Docker Compose는 다중 컨테이너를 정의하고 실행하는 도구입니다.이것은 응용 프로그램 서비스를 구성하는 일반적인 YML 파일입니다.Compose a를 사용하려면 기본적으로 다음 세 단계가 포함됩니다.
  • 응용 프로그램 환경을 정의하는 Dockerfile을 만듭니다.그것은 어느 곳에서든 복제할 수 있다.
  • docker compose를 만듭니다.응용 프로그램docker-comse.yml에 정의됩니다.그것들은 고립된 환경에서 함께 운행할 수 있다.
  • docker compose up을 실행하고 명령docker-compose up을 통해 프로그램을 시작합니다.
  • Note: For now I skip Dockerfile. I will create Dockerfile in session later.


    version: '3'
    
    services:
      mysql:
        image: mysql:8.0
        container_name: blog_mysql
        volumes:
          - db_mysql:/var/lib/mysql
        environment:
          MYSQL_ROOT_PASSWORD: password
          MYSQL_USER: blogger
          MYSQL_PASSWORD: blogger
          MYSQL_DATABASE: blog
        ports:
          - 3306:3306
    
    volumes:
      db_mysql:
    

  • 버전: 작성된 버전입니다.이것은 디지털 용수철 형식이다.

  • 서비스: 서비스는 응용 프로그램의 서비스를 구성한다.

  • mysql: 유일하게 이름에 맞는 서비스입니다.

  • 그림: 콜론 앞에는 사용할 이름 서비스, 콜론 뒤에는 버전 서비스.이미지가 나중에 변경될 경우 특정 버전을 사용하는 것이 좋습니다.

  • 컨테이너 이름: 컨테이너의 고유한 이름입니다.제공되지 않으면 무작위로 생성됩니다.

  • 볼륨: 영구적인 데이터입니다.이전의 실행에서 용기를 찾으면, 오래된 용기에서 새 용기로 볼륨을 복사합니다.이 절차는 볼륨에 생성된 데이터가 손실되지 않도록 합니다.콜론 이름db_mysql 이전에는 소스 폴더 컨테이너 스크립트였고 콜론 이름 이후에는 대상/var/lib/mysql입니다.

  • 환경: 컨테이너 MySQL에 액세스하여 데이터를 조작할 수 있습니다.

  • 포트: 용기에 접근하는 포트입니다.콜론은 이전에 호스트 연결 포트3306였고, 콜론 다음에는 MySQL 컨테이너였다.
  • 3단계: 3306 연결 MySQL 구성


    MySQL 컨테이너를 연결하기 위해 리소스 폴더의 Spring Boot 응용 프로그램application.properties에서 구성
    spring.jpa.hibernate.ddl-auto=update
    spring.datasource.url=jdbc:mysql://localhost:3306/blog
    spring.datasource.username=blogger
    spring.datasource.password=blogger
    spring.datasource.driver-class-name=com.mysql.jdbc.Driver
    
    

  • 봄.jpa.겨울잠.ddl 자동: 없음, 업데이트, 창설, 창설, 삭제, 더 자세한 정보 보기 Hibernate Document

  • 없음: 데이터베이스 구조를 변경하지 않고 기본 MySQL입니다.이것은 생산 상태에 매우 좋은 안전 보장이다.

  • 업데이트: 엔티티가 구조에 지정된 경우 데이터베이스는 Hibernate에서 변경됩니다.

  • 창설: 데이터베이스를 만들 때마다 닫을 때 삭제하지 마십시오.

  • 창설 삭제: 데이터베이스를 창설하고 application.properties 닫을 때 삭제합니다.
  • 봄.데이터 소스.url: 데이터 원본에 연결된 MySQL 용기를 지정합니다.
  • 봄.데이터 소스.사용자 이름: 지정된 사용자 이름이 데이터 소스의 MySQL에 연결됩니다.
  • 봄.데이터 소스.암호: 데이터 소스에 대한 MySQL 연결 암호를 제공합니다.
  • 봄.데이터 소스.드라이버 클래스 이름: 데이터 소스의 지정된 이름 드라이버 MySQL입니다.
  • 4단계: SessionFactory, 라이브러리, @Entity 만들기


    블로그 클래스의 실체를 정의합니다.Hibernate는 자동으로 솔리드 Blog를 데이터베이스의 테이블 Blog로 변환합니다.
    package com.khanhnhb.blog.model;
    
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    
    @Entity
    public class Blog {
    
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        public Integer id;
        public String title;
        public String content;
    
        public Integer getId() {
            return id;
        }
    
        public void setId(Integer id) {
            this.id = id;
        }
    
        public String getTitle() {
            return title;
        }
    
        public void setTitle(String title) {
            this.title = title;
        }
    
        public String getContent() {
            return content;
        }
    
        public void setContent(String content) {
            this.content = content;
        }
    }
    
  • @Controller 주석은 Hibernate가 이 클래스로 표를 생성하는 것을 알려줍니다.
  • 인터페이스의 CRUD 레코드를 조작할 블로그 저장소를 정의합니다.
    package com.khanhnhb.blog.repository;
    
    import com.khanhnhb.blog.model.Blog;
    import org.springframework.data.repository.CrudRepository;
    
    public interface BlogRepository extends CrudRepository<Blog, Integer> {
    }
    
    
  • CRUD는 생성, 읽기, 업데이트, 삭제
  • 를 의미합니다.
  • Spring은 자동으로 이 저장소 인터페이스를 블로그 Repository와 같은 이름의 bean에 구현합니다.
  • HTTP 요청을 사용할 블로그 컨트롤러를 정의합니다.
    package com.khanhnhb.blog.controller;
    
    import com.khanhnhb.blog.model.Blog;
    import com.khanhnhb.blog.repository.BlogRepository;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.*;
    
    @Controller
    @RequestMapping(path = "/blogs")
    public class BlogController {
    
        @Autowired
        private BlogRepository blogRepository;
    
        @PostMapping()
        public @ResponseBody Blog createBlog(@RequestBody Blog newBlog) {
            return blogRepository.save(newBlog);
        }
    
        @GetMapping()
        public @ResponseBody Iterable<Blog> getAll() {
            return blogRepository.findAll();
        }
    
        @GetMapping(path = "{id}")
        public @ResponseBody Blog getOne(@PathVariable Integer id) {
            return blogRepository.findById(id).get();
        }
    
        @PutMapping(path = "{id}")
        public @ResponseBody Blog updateBlog(@PathVariable Integer id, @RequestBody Blog updateBlog) {
            Blog blog = blogRepository.findById(id).get();
    
            blog.setTitle(updateBlog.getTitle());
            blog.setContent(updateBlog.getContent());
    
            return blogRepository.save(blog);
    
        }
    
        @DeleteMapping(path = "{id}")
        public @ResponseBody Integer deleteBlog(@PathVariable Integer id) {
            Blog blog = blogRepository.findById(id).get();
            blogRepository.delete(blog);
            return blog.getId();
        }
    }
    
  • @Entity 이것은 이 종류가 컨트롤러라는 것을 의미한다.
  • @Controller 메모는 URL이/blog으로 시작됨을 나타냅니다
  • @RequestMapping 주석은 블로그 리포지토리라는 이름을 얻은 bean의 방법이다.이것은 Spring이 프로그램을 시작할 때 자동으로 생성된 것으로 데이터를 처리하기 위해 사용할 것입니다.
  • @Autowire 평균 맵은 POST 요청에만 사용됩니다.
  • @PostMapping 본문 요청에서 평균 통과치를 주석합니다.
  • @RequestBody 평균 반환 개체 데이터 유형(Blog, Integer 등)을 설명합니다.
  • @ResponseBody 평균 맵은 요청만 받을 수 있음을 설명합니다.
  • @GetMapping 설명은 요청 URL에 핸들 템플릿 변수를 사용한다는 의미입니다.
  • @PathVariable 평균 맵은 요청만 배치한다는 것을 설명합니다.
  • @PutMapping 평균 매핑은 요청을 삭제하는 데만 사용됩니다.
  • 5단계: 집배원에게 HTTP 요청


    블로그 만들기@DeleteMapping
    body: 
    {
        "title": "Exploring Spring Data JPA",
        "content: "Create first blog"
    }
    

    모든 블로그 읽기POST: localhost:8080/blogs
    id를 통해 블로그 읽기GET: localhost:8080/blogs
    블로그 업데이트GET: localhost:8080/blogs/1
    body: 
    {
        "title": "Exploring Spring Data JPA and MySQL",
        "content: "Modify first blog"
    }
    

    블로그 삭제PUT: localhost:8080/blogs/1

    결론


    이 문서에서는 docker compose 파일을 작성하여 MySQL 데이터베이스 컨테이너와 연결하여 간단한 백엔드 응용 프로그램을 구축할 수 있는 Spring Boot JPA를 이해할 수 있습니다.
    📚 추천 도서
    클렌징 코드: Book
    HTTP:The Definitive Guide
    청결 건축: Book
    📱 소셜 미디어
    블로그: KhanhNHB Tech
    트위터:
    Youtube:
    GitHub:KhanhNHB
    Youtube:Khanhb Tech
    GitHub:Khanhb

    좋은 웹페이지 즐겨찾기