안녕하세요. hia의 개발 story입니다.
저번 글에 이어 JPA를 이용하여 MariaDB에 테이블을 만들어보도록 하겠습니다.
Spring Data JPA를 이용하면 엔티티 클래스를 이용해서 테이블을 자동으로 만들 수 있습니다.
DDL을 작성하는 게 꽤나 귀찮은데 이렇게 만들 수 있다면 조금 더 편하게 코딩을 할 수 있겠네요.
Entity 클래스 만들기
우선 entity 클래스를 하나 만들어 준 후 아래에 Sample 클래스를 만들어줬습니다.
package com.jenny.project.entity;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import javax.persistence.*;
@Entity
@Table(name = "sample")
public class Sample {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(length = 100, nullable = true)
private String value;
@Column(columnDefinition = "varchar(10) default 'Y'")
private String useYN;
}
@Entity : Entity 클래스를 만들기 위해서 필요한 어노테이션입니다.
@Table : 데이터베이스상에서 엔티티 클래스를 어떠한 테이블로 생성할 것인지에 대한 정보를 담기 위한 어노테이션입니다.
() 안에는 테이블 이름, 인덱스, 스키마 등을 생성 및 설정 할 수 있습니다.
생략이 가능하며 이름을 지정하지 않으면 클래스명 그대로 테이블이 생성됩니다.
@Id : @Entity가 붙은 클래스는 Primary Key에 해당하는 필드에 @Id로 지정해주어야만 합니다.
지정하지 않으면 에러가 발생합니다.
@GeneratedValue : Id값을 직접 입력 받지 않는 경우 자동으로 생성하게 하기 위한 어노테이션입니다.
4가지의 키 생성 전략 방식이 있으며 필요에 따라 결정하여 사용하면 됩니다.
GenerationType.Auto - JPA 구현체가 생성 방식을 결정
GenerationType.IDENTITY - 사용하는 데이터베이스가 키 생성을 결정 ( MariaDB의 경우 auto increment 방식 이용)
GenerationType.SEQUENCE - sequence를 이용하여 키를 생성 @SequenceGenerator와 같이 사용
GenerationType.TABLE - 키를 생성하는 테이블을 이용하여 키 생성 @TableGenerator와 같이 사용
@Column : 테이블에 컬럼을 추가할 때 사용하는 어노테이션입니다.
컬럼의 여러 속성을 지정할 수 있습니다.
application.properties 수정
아래의 설정을 추가하여 줍니다.
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.show-sql=true
- spring.jpa.hibernate.ddl-auto : 프로젝트 실행 시 자동으로 DDL을 생성할 것인지를 설정합니다.
create는 매번 새로 생성을 시도
update는 테이블이 없으면 create, 테이블이 있고 변경이 필요한 경우에는 alter
- spring.jpa.properties.hibernate.format_sql : Hibernate가 동작하면서 발생하는 SQL문을 포맷팅하여 출력합니다.
- spring.jpa.show-sql : 처리 시에 발생하는 SQL문을 보여줄지 여부를 결정합니다.
위의 클래스와 설정을 추가한 후 프로젝트를 실행시키면 아래와 같은 로그가 찍힙니다.
DB에서 테이블이 생성되었는지 확인
select * from sample;
데이터는 없지만 아래와 같이 생성된 것을 확인할 수 있습니다.
'Springboot' 카테고리의 다른 글
[Spring Boot] JpaRepository의 페이징 및 정렬 처리 하기 (0) | 2023.03.22 |
---|---|
[Spring Boot] JpaRepository를 이용한 CRUD 테스트 예제 공부 (0) | 2023.03.21 |
[Spring Boot] MariaDB와 Spring JPA 사용하기 (0) | 2023.03.14 |
[Spring Boot] header 메뉴 선택 시 jquery로 class 값 변경하기 (0) | 2022.12.22 |
[Spring Boot] Thymeleaf를 이용한 header, footer 등 공통 페이지 조각 만들기 (0) | 2022.12.14 |