본문 바로가기
Back-End/Spring

[Spring boot] JPA & MariaDB 테이블생성

by LeeGangEun 2022. 6. 10.

 Application.properties

server.port=8181   // 서버 포트 설정(기본값 8080) => 내장 톰캣이기때문
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver // mariadb 부분만 다른걸로 변경하면 연동 가능
spring.datasource.url=jdbc:mariadb://localhost:3306/bootex // bootex DB에 연동
spring.datasource.username=bootuser // 아이디
spring.datasource.password=bootuser // 패스워드


spring.jpa.hibernate.ddl-auto=update  
//프로젝트 실행시 자동으로 DDL(create, alter, drop) 을 생성할 것 인지 결정하는 설정
// create : 매번 테이블 생성을 새로 시도한다
//update : 변경이 필요한 경우 alter로 변경되고 테이블이 없는경우 create가 된다


spring.jpa.properties.hibernate.format_sql=true 
// 실제 JPA 구현체인 Hibernate가 동작하면서 발생하는 SQL을 포맷팅해서 출력한다
// -> 실행되는 SQL의 가독성을 높여준다

spring.jpa.show-sql=true // 처리시 발생하는 SQL을 보여줄 것인지 결정

spring.thymeleaf.cache=false //thymeleaf을 저장 후 새로고침으로 바로 적용 !

 

build.gradle - 의존성 추가

    dependencies {
        implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
        implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
        implementation 'org.springframework.boot:spring-boot-starter-web'
        compileOnly 'org.projectlombok:lombok'
        developmentOnly 'org.springframework.boot:spring-boot-devtools'
        annotationProcessor 'org.projectlombok:lombok'
        providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
        testImplementation 'org.springframework.boot:spring-boot-starter-test'
        // https://mvnrepository.com/artifact/org.mariadb.jdbc/mariadb-java-client
        implementation group: 'org.mariadb.jdbc', name: 'mariadb-java-client', version: '2.7.1'
    }

 

Entity 생성

import lombok.*;
import javax.persistence.*;

@Entity 
// 해당 클래스가 엔티티를 위한 클래스이며,
// 해당 클래스의 인스턴스들이 JPA로 관리되는 entity 객체라는 것을 의미
// 옵션에 따라서 자동으로 table 생성가능
// 클래스의 멤버 변수에 따라서 자동으로 칼럼들도 생성된다.

@Table(name = "tbl_memo") 
// @Entity 어노테이션과 같이 사용할 수 있는 어노테이션 
// DB상에서 엔티티 클래스를 어떤 테이블로 생성할 것인지에 대한 정보를 담기위한 어노테이션


@Data 
// @Getter  @Setter, @ToString, @EqualsAndHashCode, @RequiredArgsConstructor
// 이 모든걸 합친 어노테이션

@Builder // builder 패턴 사용하기 위한 어노테이션
@AllArgsConstructor // @Builder 를 이용하기 위해서 항상 같이 처리해야 컴파일 에러가 발생하지 않는다
@NoArgsConstructor // @Builder 를 이용하기 위해서 항상 같이 처리해야 컴파일 에러가 발생하지 않는다
public class Memo {

   @Id // @Entity 가 붙은 클래스는 PK에 해당하는 특정필드를 @Id로 지정해야 한다
   @GeneratedValue(strategy = GenerationType.IDENTITY)
   // 해당 어노테이션은 사용자가 입력하는 값을 사용하는 경우가 아니면 자동으로 생성되는 번호를 사용하기 위해 사용한다
   private Long mno;
   
   @Column 
   // 추가적인 필드(컬럼)이 팔요한 경우 사용 * DB 테이블에는 컬럼으로 생성되지 않는 필드의 경우 @Transient를 사용한다
   private String memoText;
}

 

프로젝트 실행 후 확인

@Entity 클래스로 인해 테이블이 생성되고 이름을 지정하지 않으면 class 이름으로 생성된다.
JPA의 Table 생성 방법이다 !
tbl_memo 라는 이름의 테이블이 생성되고
mno, memo_text 두 컬럼도 함께 생성된다.