web +a

스프링부트 ~17 | SQL 쿼리 로깅 & CRUD 쿼리 실습

냥냥체뤼 2022. 7. 20. 22:59

recall)

JPA의 Repository는 java코드로 작성된 데이터를 Entity 형태로 DB에 전달하여,

sql 문법을 사용하는 DB가 데이터를 다룰 수 있도록 돕는다고 했다.

 

즉 DB가 데이터를 CRUD할 때 sql 쿼리로 CRUD한다.

더보기

recall.. 

  HTTP SQL
Create POST insert
Read GET select
Update PATCH(PUT) update
Delete DELETE delete

 

 


CRUD 쿼리를 확인해보기 앞선 설정들

 

● 웹애플리케이션이 실행될 때, 그 sql 쿼리에 대한 로그를 찍어볼 수 있다. 

application.properties에 JPA 로깅 설정을 하면 된다. 

cf. 로깅의 레벨은 크게 7단계가 있다. sql 출력시에는 DEBUG 레벨로 로깅한다 ↓

 

# 17강: JPA 로깅 설정
## 디버그 레벨로 쿼리 출력
logging.level.org.hibernate.SQL=DEBUG
## 이쁘게 보여주기 - 쿼리 포맷 딱 잡아서 출력해준다
spring.jpa.properties.hibernate.format_sql=true
## 파라미터 보여주기
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE

## 고정 url 설정 - 매번 mem주소가 바뀌어서 귀찮았다 - 고정해주자
spring.datasource.url=jdbc:h2:mem:testdb

 

 

● @GenerateValue를 그냥 사용했을 때 문제점: 

given : 더미데이터 id = 1, 2, 3이 처음부터 들어와있을 때

when : 데이터를 맨처음 새로 create할 경우 

then : id값 1이 중복되어 오류가 난다

대표값(id)는 중복되면 안 된다!

중복 문제를 피하려면 @GeneratedValue(strategy = GenerationType.IDENTITY) 설정을 넣는다.

자동생성 전략을 DB가 알아서 id를 적절히 부여하는 방식으로 설정하는 것이다.

* 이게 일반적인 설정이다.

 

// Entity의 대표값(id) 부여는 이렇게하자 ↓
public class Article {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    @Column
    ...
    
    @Column
    ...
}

 


CRUD 쿼리 확인해보기

 

로그에 찍힌 쿼리 확인

& 기본 SQL 쿼리 연습

 

↑ 요거 공부했다. 

 

 

∨ 기본 SQL 쿼리 연습

가볍게.. 봤다.

가볍게 무슨느낌인지 알게따.

DB학습은 라섹 끈나고 뽝 몰아서 해봐야겠다.

 

 

- 새로운 테이블을 만드는 쿼리문 (예: coffee 테이블)

CREATE TABLE coffee (
  id    BIGINT         GENERATED BY DEFAULT AS IDENTITY,
  name  VARCHAR(255),
  price INTEGER,
  PRIMARY KEY (id)
);

 

- 레코드 추가

-- 단건 추가
INSERT INTO
  coffee(id, name, price)
VALUES
  (1, '아메리카노', 4100)
;

-- 여러건 추가
INSERT INTO
  coffee(id, name, price)
VALUES
  (2, '라떼', 4600),
  (3, '모카', 5100),
  (4, '오늘의 커피', 3800)
;

 

- 커피 레코드 조회

SELECT
  id,
  name,
  price
FROM
  coffee
;

 

- 커피 레코드 수정

UPDATE
  coffee
SET
  price = 9900
WHERE
  id = 4
;

 

- 커피 레코드 삭제

DELETE FROM
  coffee
WHERE
  id = 4
;

 

 


정리는 여기서 끗! 

반응형