놀랍게도 Jpa를 사용하면 자바코드로 MySQL 테이블을 바로 생성할 수 있다! (@Entity)
스프링 앱 실행 시 MySQL 서비스가 동작중이어야 테이블이 생성된다.
.yml의 jpa 설정 상태
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
(1) jasper
.jsp 경로를 설정한 이유는 스프링 부트는 기본적으로 jsp사용을 권장하기 않기 때문에 thymeleaf 같은 다른 템플릿 엔진을 사용해야 한다. 하지만 jsp를 사용하기 위해서는 해당 구조로 폴더 구성을 한 뒤 세팅하여야 한다.
(2) com.mysql.cj.jdbc.Driver
datasource 의 mysql 드라이버에 cj가 들어간 이유는 mysql 6점대 이상 버전부터는 해당 드라이버를 사용하고 그 이전 드라이버는 cj가 없는 com.mysql.jdbc.Driver를 사용한다.
(4) ddl-auto
- create - 서버 시작시마다 DB초기화
- update - 수정사항만 DB에 반영
- none - DB에 아무런 반영을 하지 않음.
(5) physical-strategy
- org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
- 엔티티를 만들 때 변수명 그대로 DB에 필드를 만들어 준다.
- org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy
- 엔티티를 만들 때 변수명에 언더스코어를 붙여준다. 예) createDate -> create_date
(6) show-sql: true
(7) use-new-id-generator-mappings: false
use-new-id-generator-mappings 는 mysql로 말하면 auto_increment 오라클로 말하면 시퀀스를 어떤식으로 사용할지 방식을 결정하는 것인데 false를 하면 jpa가 사용하는 기본 넘버링 전략을 따라가지 않는다는 뜻이고 true를 하면 기본 넘버링 전략을 따라간다는 뜻이다.
- User.java
package com.pure.blog.model;
import java.sql.Timestamp;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import org.hibernate.annotations.ColumnDefault;
import org.hibernate.annotations.CreationTimestamp;
@Entity //User 클래스가 MySQL에 자동으로 테이블로 생성됨.
public class User {
@Id //PK
@GeneratedValue(strategy = GenerationType.IDENTITY) //프로젝트에서 연결된 DB의 넘버링 전략을 따라간다.
private int id; //시퀀스, auto_increment
@Column(nullable = false, length = 30)
private String username; //아이디
@Column(nullable = false, length = 100) //추후 해쉬(비밀번호 암호화)를 위함.
private String password;
@Column(nullable = false, length = 50)
private String email;
@ColumnDefault("'user'") //user는 작은 따옴표로 묶어야 문자임을 알려줄 수 있음.
private String role; //admin, user, manager 등을 설정. //Enum을 쓰는 게 좋다. 도메인을 설정해서 이상한 값이 들어가는 것을 방지하기 위함.
@CreationTimestamp //시간이 자동으로 입력됨
private Timestamp createDate;
}
Hibernate:
drop table if exists User //ddl-auto: create 이기 때문에 발생
Hibernate:
//show-sql: true 이기 때문에 발생
//properties: hibernate.format_sql: true 덕분에 sql에서 보던대로 예쁘게 포맷해서 보여줌.
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
콘솔창의 메세지.
이렇게 자동으로 MySQL 테이블이 생성된다.
이것이 바로 ORM! 자바 객체가 DB와 바로 연동된다!
'취업 준비 > Spring boot' 카테고리의 다른 글
10. Reply 테이블 생성하기 (0) | 2022.01.22 |
---|---|
9. Board 테이블 생성하기 (0) | 2022.01.21 |
7. yml 설정 (0) | 2022.01.21 |
6. lombok의 builder (0) | 2022.01.21 |
5. Http 1.1 실습 (0) | 2022.01.21 |