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에서 테이블 생성되면 그냥 클릭해서 들어갔는데..
이번에는 쿼리문으로 명령어 쳐서 실행해보았다. 쿼리문도 익숙해지고 싶어서..