스프링부트 ~17 | SQL 쿼리 로깅 & CRUD 쿼리 실습
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
;
정리는 여기서 끗!