CRUD와 SQL 쿼리

OneTwoThree·2022년 10월 17일
0

유튜브
DML
DDL

CRUD 과정을 해보면서 sql 쿼리를 연습해보자

spring.h2.console.enabled=true
spring.jpa.defer-datasource-initialization=true

#JPA 로깅 설정
#디버그 레벨로 쿼리 출력
logging.level.org.hibernate.SQL=DEBUG
#이쁘게 보여주기
spring.jpa.properties.hibernate.format_sql=true
#파라미터 보여주기
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE

#DB URL 고정 설정
#유니크 URL 생성 X
spring.datasource.generate-unique-name=false
#고정 URL 설정
spring.datasource.url=jdbc:h2:mem:testdb

먼저 application.properties 에 설정을 몇가지 해줘야 한다.
sql을 로깅하기 위한 설정과 db url을 고정해주기 위한 설정을 해줬다.
그리고 sql 쿼리가 보일 때 파라미터는 ?로 보이게 되는데 그 ?가 어떤 파라미터인지 표시된다.

h2-console에 접속할 때 계속 jdbc 검색해서 주소 찾아서 들어갔었는데 이제 그냥 jdbc:h2:mem:testdb 로 입력해서 가면 된다. (고정됨)


이렇게 하고 db 로그를 확인해 보려고 /articles 에 드가서

이렇게 입력하고 제출을 누르면 에러가 발생한다..

이유는 더미 데이터를 3개 (각각 id 1, 2, 3)으로 이미 만들어 놨는데 id가 1인 데이터가 또 생기기 때문이다. 데이터의 id는(대표값) 겹치면 안된다.

package com.example.firstproject.entity;


import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.ToString;

import javax.persistence.*;

@Getter
@Entity  // 이 어노테이션을 붙여야 DB가 이 객체를 인식한다
@AllArgsConstructor
@NoArgsConstructor //디폴트 생성자 추가
@ToString
public class Article {

    @Id // 각 객체를 식별하기 위한 Id임 (주민번호 같은거)
    @GeneratedValue(strategy = GenerationType.IDENTITY) // DB가 id를 자동생성함 
    private Long id;

    @Column //DB가 필드를 인식할 수 있게 해줌
    private String title;
    @Column
    private String content;

}

해결하기 위해서 엔티티 클래스에서 어노테이션을 살짝 수정해준다.

@GeneratedValue(strategy = GenerationType.IDENTITY) // DB가 id를 자동생성함

id 어노테이션에 stratgey를 추가해줘서 원래는 1부터 자동생성이었는데 이제 db가 id를 알아서 자동생성하도록 했다.


먼저 CRUD 할 때 어떤 쿼리들이 실행되는지 한번 쭉 확인해보자

  • C

  • R

    밑줄 친 부분만 보면된다

  • U

  • D


package com.example.firstproject.entity;


import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.ToString;

import javax.persistence.*;

@Getter
@Entity  // 이 어노테이션을 붙여야 DB가 이 객체를 인식한다
@AllArgsConstructor
@NoArgsConstructor //디폴트 생성자 추가
@ToString
public class Article {

    @Id // 각 객체를 식별하기 위한 Id임 (주민번호 같은거)
    @GeneratedValue(strategy = GenerationType.IDENTITY) // DB가 id를 자동생성함
    private Long id;

    @Column //DB가 필드를 인식할 수 있게 해줌
    private String title;
    @Column
    private String content;

}

Article.java에 보면 @Entitiy 어노테이션과 @Column 어노테이션으로 엔티티 클래스를 db가 인식할 수 있게 했는데 이게 바로 이름이 Article인 테이블을 만들고 컬럼은 title, content, id가 있게 하는 것이다.

이러한 이유로 서버를 처음에 시작하면 이런 sql 문이 표시된다.

그리고 CRUD 쿼리 사용 하는것을 강의에서 쭉 진행하는데 나는 부스트코스 강의 들으면서 정리한 내용이 있고 위 스샷도 있으니까 따로 정리는 안하겠음

0개의 댓글