테이블 생성하는 과정 뜯어보기

myeonji·2022년 2월 14일
0

User 테이블을 생성하고자 한다.

@Entity // User 클래스가 MySQL에 자동으로 테이블이 생성된다.
public class User {

    @Id // Primary key
    @GeneratedValue(strategy = GenerationType.IDENTITY) // 프로젝트에서 연결된 DB의 넘버링 전략을 따라간다. (오라클이든 MySQL이든.. 등등)
    private int id; // 오라클-시퀀스, MySQL-auto_increment

    @Column(nullable = false, length = 30) // null이 될 수 없고, 30자까지 밖에 안된다.
    private String username; // 아이디

    @Column(nullable = false, length = 100) // null이 될 수 없고, 100자까지 밖에 안된다. (100자 넣는 이유 : 해쉬(비밀번호 암호화)할 것을 대비해서 넉넉하게 만들기)
    private String password;

    @Column(nullable = false, length = 50) // null이 될 수 없고, 50자까지 밖에 안된다.
    private String email;

    @ColumnDefault("'user'") // default값 만들기, 문자라는 것 알려주기 위해 ''로 감싸고 ""로 다시 감싸기
    private String role; // Enum을 쓰면 데이터의 도메인(범위)을 만들어 줄 수 있다. (도메인 : admin, user, manager ...) -> 하지만 우선 String으로..

    @CreationTimestamp // 시간이 자동으로 입력
    private Timestamp createDate;
}

< application.yml >

jpa:
    open-in-view: true
    hibernate:
      ddl-auto: create
      naming:
        physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
      use-new-id-generator-mappings: false
    show-sql: true
    properties:
      hibernate.format_sql: true
  • use-new-id-generator-mappings: false 는 JPA의 기본 전략을 따라가지 않겠다는 뜻! 나는 User Entity에서 id에 @GeneratedValue(strategy = GenerationType.IDENTITY) 로 하여 프로젝트에서 연결된 DB의 넘버링 전략을 따라갈 것이기에 false로 주었다.

  • naming: physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl 는 변수명 그대로 테이블 피드를 생성하겠다는 것! (private String myEmail; 일 때 테이블 피드도 myEmail이 됨)

  • 만약, naming: physical-strategy: org.hibernate.boot.model.naming.SpringPhysicalNamingStrategy 라고 쓴다면, 대문자를 _(언더바)소문자 로 바꾼다. (private String myEmail; 일 때 테이블 피드는 my_email이 됨)

< 콘솔 >

Hibernate: 
    
    drop table if exists User // 전략이 create이기 때문에 기존에 테이블이 있으면 삭제해라
Hibernate: 
    
    create table User (
       id integer not null auto_increment,
        createDate datetime(6),
        email varchar(50) not null,
        password varchar(100) not null,
        role varchar(255) default 'user',
        username varchar(30) not null,
        primary key (id)
    ) engine=InnoDB

❓❔ 위 내용이 출력되는 이유 : show-sql: true 해놨기 때문!
추가로, 원래는 한 줄로 나오지만 예쁘게 정렬되어 나오는 이유는 properties: hibernate.format_sql: true 때문이다.

추가내용은 여기에!!

💡 쿼리문 작성해보기

항상 Workbench에서 테이블 생성되면 그냥 클릭해서 들어갔는데..
이번에는 쿼리문으로 명령어 쳐서 실행해보았다. 쿼리문도 익숙해지고 싶어서..

0개의 댓글