ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 02. Spring Boot JPA 테이블 자동 생성
    자바/JPA 2022. 3. 16. 18:37

    1. 스프링에서 JPA 구동방식

    - Persistenc class에서 설정 정보를 읽어서 EntityManagerFactory를 만듭니다. 필요할 때마다 EntityManger를 생성해 작동합니다.

    - 스프링 부트에서는 JPA를 사용할 때 EntityManagerFactory에 대한 코드를 따로 작성할 필요가 없습니다.

    - 스프링 부트에서는 JpaRepository<엔티티클래스, pk 변수 타입>을 확장 받는 인터페이스를 생성해서 쉽게 JPA 기능을 사용할 수 있습니다.

    package com.example.hellojpa;
    
    import org.springframework.data.jpa.repository.JpaRepository;
    import org.springframework.stereotype.Repository;
    
    @Repository
    public interface MemberRepository extends JpaRepository<Member, Long> {
    
    }
    
    package com.example.hellojpa;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    
    @RestController
    @RequestMapping("/test")
    public class TestApiController {
    
        @Autowired
        MemberRepository memberRepository;
    
        @GetMapping
        String test(){
            Member member = Member.builder()
                    .id(1L)
                    .name("스프링")
                    .build();
            System.out.println(member.toString());
            memberRepository.save(member);
    
            return "test";
        }
    }
    

    - http://localhost:8080/test

    - http://localhost:8080/h2-console/

     

    2. pom.xml 설정

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>

     

    3. application.yml 설정

    spring:
      datasource:
        url: jdbc:h2:mem:hellojpa
        username: sa
        password:
      h2:
        console:
          enabled: true
          path: /h2-console
    
      jpa:
        show-sql: true
        generate-ddl: true
        hibernate:
          ddl-auto: create

    - jpa.show-sql: JPA를 이용해 수행되는 쿼리 스크립트가 서버 로그에 노출됩니다.

    - jpa.generate-ddl: 스프링 부트 서버가 기동될 때마다 수행됩니다.

    - jpa.hibernate.ddl-auto: 생성한 엔티티에 따른 테이블을 drop, create, alter 등의 작업을 수행합니다.

    운영 중인 서비스에서는 테이블의 데이터가 날아갈 수도 있으니 해당 설정을 건드리면 안됩니다.

    보통 주석처리하거나 validate로 사용합니다.

     

    4. Entity 생성하기

    package com.example.hellojpa;
    
    import lombok.*;
    
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    
    @Builder
    @AllArgsConstructor
    @NoArgsConstructor
    @ToString
    @Data
    @Entity(name = "Members")
    public class Member {
        @Id
        @GeneratedValue
        private Long id;
    
        private String name;
    }
    

    - @Entity(name="테이블명"): 테이블 명을 설정하지 않으면 클래스명으로 테이블이 생성됩니다.

    - @Id: 테이블의 primary key 설정입니다.

    - 이외 나머지 어노테이션은 롬북 어노테이션이며 굳이 설정하지 않으셔도 됩니다.

     

    5. 서버 재기동

    스프링 부트 서버를 기동하면 테이블을 자동으로 생성합니다. 너무 편하죠?

     

     

     

    '자바 > JPA' 카테고리의 다른 글

    Spring JPA 이론 정리  (0) 2022.03.16
    01. Spring Boot 임베디드 DB H2 사용해보기  (0) 2022.03.16
Designed by Tistory.