본문 바로가기

⭐ SpringBoot/𝄜 게시판 with SpringBoot

16. CRUD와 SQL 쿼리

728x90
반응형

JPA의 Repository를 통해서 손쉽게 데이터를 관리 할 수 있었다.

Repository가 요청을 보내면 DB는 자신의 언어 즉 SQL로 작성된 쿼리문을 통해서 데이터를 테이블에 관리 하였다.

 

실제 쿼리문 확인하기

JPA에서 실행하는 쿼리문을 로깅하여 확인하기

쿼리 로깅은 appication.properties 파일에서 설정한다.

#JPA 로깅 설정
#디버그 레벨로 쿼리 출력
logging.level.org.hibernate.SQL=DEBUG

#쿼리를 구조적으로 출력하기
spring.jpa.properties.hibernate.format_sql=true

#파라미터 보여주기(?로 표시되는 변수 및 파라미터 값을 콘솔 화면에 표시)
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE

내용 확인하기

서버를 껐다가 재시작 하면 콘솔 화면에 아래와 같이 쿼리문으로 내용이 출력되는것을 확인 할 수 있다.

2022-04-04 14:59:28.605 DEBUG 9704 --- [           main] org.hibernate.SQL                        : 
    
    create table article (
       id bigint not null,
        content varchar(255),
        title varchar(255),
        primary key (id)
    )
2022-04-04 14:59:28.610  INFO 9704 --- [           main] o.h.e.t.j.p.i.JtaPlatformInitiator       : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]

h2 DB URL을 고정값으로 활용하기

appication.properties 파일에 작성

앞으로 설정한 jdbc 값을 가지고 접근을 하면 된다. spring.datasource.url=jdbc:h2:mem:testdb

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

에러 해결하기 

localhost:8080/articles 로 접근하여 새로운 데이터를 생성하면 오류가 발생한다.

해당 오류가 발생하는 원인은 기존의 data.sql로 서버 실행시 INSERT하는 값과, 신규로 생성할때 생성되는 id값이 중복되기 때문에 오류가 발생한다.

ID 자동 생성 전략을 통해 해당 오류를 해결 할 수 있다.

entity > Article 파일로 이동하면 아래 코드처럼 @GeneratedValue 값으로 id값을 자동으로 생성하고 있는 모습니다.

이 id값을 데이터 베이스가 알아서 넣어 주도록 변경하자.

 @GeneratedValue(strategy = GenerationType.IDENTITY) 해당 코드를 추가하면 DB가 id를 자동으로 생성한다.

데이터가 생성될때마다, DB가 1,2,3,4,5,... 처럼 자동으로 생성 하도록 하는 코드이다.

package com.example.firstproject.entity;

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

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

//@NoArgsConstructor // 디폴트 생성자를 추가해주는 어노테이션
@Entity //DB가 해당 객체를 인식 가능
@ToString
@AllArgsConstructor
@Getter
public class Article {

    // 기본적으로 Entity에는 대표값을 넣어줘야 한다.

    @Id // 사람으로 치면 주민등록 번호 같은 대표값 개념이다.
    @GeneratedValue(strategy = GenerationType.IDENTITY) //DB가 id를 자동 생성하는 어노테이션.
    private Long id;

    @Column // DB에서 이해할수 있도록 Column 이라는 어노테이션을 붙여준다.
    private String title;

    @Column
    private String content;

    public Article() {
    }

    public Long getId() {
        return id;
    }
}

쿼리 실행 문구 확인하기 > 아래와 같이 서버의 콘솔에서 해당 쿼리문이 출력되는것을 확인 할 수 있다.

728x90
반응형

'⭐ SpringBoot > 𝄜 게시판 with SpringBoot' 카테고리의 다른 글

18. HTTP RestController  (0) 2022.04.04
17. RestAPI & JSON  (0) 2022.04.04
15. 데이터 삭제 하기  (0) 2022.04.04
14. 수정된 데이터를 DB에 저장하기  (0) 2022.04.03
13. 수정폼 만들기  (0) 2022.04.03