본문 바로가기

Back-end (Spring Boot , JPA, JSP)/필기일지

240129 [Back-end] JPA yml DDL DML 관련 DB 설정

반응형

[24.01.29]

 

<<진도>>

[Back-end] JPA 

yml  DDL DML 관련 DB 설정

 

 

 

ver3- security 실습

yml 파일로 시큐리티세팅이 자동완성이 가능함

 

.properties를 .yml 로 변경 후 작성

##db연결
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/ver3
    username: root
    password: 1111
 
 
## 서버설정
server:
  port: 8085

 

(** Application에 exclude로 넣으면 실행시 시큐리티를 꺼놓을 수 있다.)

 

 

Entity를 가지고 자동으로 DB 테이블 생성 (DDL과 관련)

jpa.hibernate.ddl-auto

 

1. ddl-auto: create

 

 

서버가 실행이될 때 기존 테이블을 삭제 후 다시 생성

 

2. ddl-auto: create-drop

서버가 종료될 때 아예 테이블을 삭제 -> 서버실행될 떄 테이블 생성

 

3. none

생성 삭제 일절 안함

 

4. update

삭제 생성이 아닌 / 변경이 이루어진 것만 업데이트 함

 

Entity 수정 후

수정됨

alter쿼리 실행됨

 

 

 

 

 

create와 관련된 DDL : schema.sql / yml파일 설정에서 특정 db지정

 

실제 쿼리문으로 schema.sql에서 테이블생성 resource에 생성하면 서버 재실행 될때 DDL 과 관련된 명령 스크립트 실행

yml의 sql.init.mode

 

## always : 모든 DBMS 스크립트 파일 실행 (내/외장)

## embedded : 내장 DBMS만 실행

## never : 모든 DBMS 실행하지 않음

 

 

* DML 과 관련된 것은 data.sql에 작성 후 실행

  • select : 데이터 조회
  • insert : 데이터 삽입
  • update : 데이터 수정
  • delete : 데이터 삭제

앞으로 dummy 데이터는 이것을 통해 넣어두면 된다!!

 

schema -> data 순으로 실행 됨


sql script들의 위치는 resources에 database폴더

 

resources 기본경로를 벗어난 sql 파일을 별도의 경로 지정이 필요

 

*: 는 해당경로 내 다중파일 모두 실행

자동완성됨 

 

서버가 재실행 될 때마다 schema.sql, data.sql 이 실행 (sql 스크립트파일은 실행파일!)

 

schema.sql에

insert 같은 DML을 넣어주어도 실행은 되지만!

원칙적으로 DML은 data.sql에 넣는다!

 

컬럼데이터를 전부 넣을때 자동 증가 기본키는 null로 넣어주면 잘 된다.

 


 

** schema.sql 스크립트파일 실행의 user가 있고

/ hibernate 의 ddl-auto: create(삭제 후 생성)로 엔티티 user가 만들어지는 경우

 

 

우선적으로 sql 스크립트가 실행된다!

따라서  hibernate가 생성한 테이블이 최종으로 있는데

 

자동생성은 컬럼 순서가 보장되지 않음

 

** 또한 스크립트 sql 파일이 먼저 실행되기때문에 hibernate로 테이블생성 + data.sql로 데이터 입력도 불가능!!

(data.sql 이 먼저 실행되기 때문에)

 

따라서

!! hibernate가 먼저 실행되게 하는 세팅

defer-datasource-initialization: true

 

 

hibernate => schema.sql, data.sql

데이터가 들어온다.

but, 테이블의 컬럼명 순서는 알파벳 순으로 자동 정렬되고

       카멜표기법으로 Entity field를 채워놔도  mysql이 대소문자를 구분하지않아 컬럼명은 스네이크 표기법 생성

       ex) userEmail -> user_email

 

(+ Entity 클래스명과 별개로 테이블명 지정가능)

 


 

hibernate 쿼리문 설정

포맷 및 색 변경


 

binding 설정

 

 

반응형