본문 바로가기

프로젝트/개인

3. jpa로 테이블 생성하기

entity 클래스들 만들어주고

 

기본 따라가지 않고
프로젝트 db의 넘버링 전략을 따라감

 

1.user entity

package com.cos.blog.model;

import org.hibernate.annotations.ColumnDefault;
import org.hibernate.annotations.CreationTimestamp;

import javax.persistence.*;
import java.sql.Timestamp;

@Entity//user 클래스가 MySQL에 테이블 생성이 된다
public class User {

    @Id //primary key
    @GeneratedValue(strategy = GenerationType.IDENTITY) // 프로젝트에서 연결된 db의 넘버링 전략을 따라간다.
    private int id; // 시퀀스,auto_increment

    @Column(nullable = false, length = 30)
    private String username;//아이디

//    패스워드를 해쉬로 변경해서 암호화할거라서, 넉넉하게 100으로 준다
    @Column(nullable = false, length = 100)
    private String password;

    @Column(nullable = false, length = 50)
    private String email;


    @ColumnDefault("'user'")//"''"=> 안에 있는게 문자열임을 알려준다.
    private String role; //Enum을 쓰는게 좋음
    // => admin, user, manager 등의 역할부여시 String이라면 managerrr 등의 오타 낼 수 있음
    // 그러나 enum을 쓸 경우 domain(범위)을 쓸 수 있기 때문에 오타낼 걱정 x

    @CreationTimestamp //시간이 자동 입력됨 (mysql: now나 oracle: sysdate를 안써도됨)
    private Timestamp createDate;

}

2.application.yml

server:
  port: 8090
  servlet:
    context-path: /blog
    encoding:
      charset: UTF-8
      enabled: true
      force: true

spring:
  mvc:
    view:
      prefix: /WEB-INF/views/
      suffix: .jsp

  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/blog?serverTimezone=Asia/Seoul
    username: cos
    password: cos1234

  jpa:
    open-in-view: true
    hibernate:
#      ddl-auto: create 프로젝트 실행시 마다 테이블을 새로 만든다는거임,
#      최초 실행시만 저렇게 하고 나중에 update로 바꾼다
      ddl-auto: create

      naming:
        physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
#      jpa가 사용하는 기본 넘버링 전략을 따라가지 않는다.
      use-new-id-generator-mappings: false
#    쿼리 보여주기
    show-sql: true
#    쿼리 줄바꿈해서 예쁘게 보여주기
    properties:
      hibernate.format_sql: true

  jackson:
    serialization:
      fail-on-empty-beans: false

 ddl-auto : create인지 확인 후

실행 전 서비스에서 mysql이 실행중인지 체크, 실행중이어야 테이블 생성 가능

 

이제 실행하면?

drop table => ddl auto : create라서 테이블 있거나 말거나 비우고 매번 새로 만들어주기 때문에 뜨는 것

이게 있어서 콘솔창에 쿼리 뜨는것

 

PhysicalNamingStrategyStandardImpl

=> 필드 네임 그대로 db 컬럼이름 생성(다른 전략쓰면 카멜, 스네이크 등으로 바꿀 수 있다)

 

3. mysql에서 확인하기

 

cos 아이디로 접속(저 use blog에 대한 설명은 밑에) 하면 테이블이 잘 생겨있다
mysql은 아이디에 접속하면 끝이 아니라  어떤 데이터베이스 쓸건지 만들고 선택해야 하는듯

orm => java(다른 언어도!) Object => 테이블로 매핑해줌

user클래스에 이름 바꾸는 대로 족족 바로 db에 만들어짐 대박 편하다.