728x90
* 학습목표
데이터 CRUD 과정의 SQL 쿼리를 분석하시오.
실습 개요
1. 각 과정에서 수행되는 Query를 log로 확인해보기.
2. 확인된 log로 DB에서 직접 사용해보는 훈련
JPA 로깅 설정.
application.properties 파일에
# JPA 로깅 설정
# 디버그 레벨로 쿼리 출력
logging.level.org.hibernate.SQL=DEBUG
//SQL을 출력할때는 DEBUG레벨을 사용한다.
회사에서 업무를 하게되면, 무분별한 로그때문에 로그 확인시 어려움을 겪게되는데,
불필요한 로그로 인해 비지니스 로그를 찾기 힘들어진다.
그래서 레벨을 설정해주어 필요한 부분의 로그만 가져간다.
# Log Level 종류
# TRACE : 추적 레벨은 Debug보다 좀더 상세한 정보를 나타냄
# DEBUG : 프로그램을 디버깅하기 위한 정보 지정
# INFO : 상태변경과 같은 정보성 메시지를 나타냄
# WARN : 처리 가능한 문제, 향후 시스템 에러의 원인이 될 수 있는 경고성 메시지를 나타냄
# ERROR : 요청을 처리하는 중 문제가 발생한 경우
# FATAL : 아주 심각한 에러가 발생한 상태, 시스템적으로 심각한 문제가 발생해서 어플리케이션 작동이 불가능할 경우
# 이쁘게 보여주기()
spring.jpa.properties.hibernate.format_sql=true
쿼리가 한줄로 출력되는걸
포맷을 설정해줘서 해당 형태로 출력한다.
create table article (
id bigint generated by default as identity,
content varchar(255),
title varchar(255),
primary key (id)
)
# 파라미터 보여주기
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE
쿼리를 던지다보면 ? 값에 어떤 변수기 담겨있는지 볼 수 있게 해준다.
매번 H2 DB 접근할 때마다
콘솔에서 JDBC URL을 찾아 검색해서 Connect 하는게 귀찮으니
# DB URL 고정 설정을 해준다.
# 유니크 URL 생성 X
spring.datasource.generate-unique-name=false
# 고정 url 설정
spring.datasource.url=jdbc:h2:mem:testdb
//JDBC URL,, 앞으로 이걸로만 접속.
서버를 실행하면 이제 JDBC URL값을 바꿔줄 필요가 없다.
게시물을 생성하면 데이터 id 중복 에러가 나는데
데이터의 대표값은 겹치면 안된다.
ID 자동 생성 전략
entity/Article 에
@id // 대표값을 지정! like a 주민등록번호
@GeneratedValue() -> @GeneratedValue(strategy = GenerationType.IDENTITY)
//DB가 id 값을 자동 생성 한다.
private Long id;
생성(INSERT) 쿼리
insert
into
article
(id, content, title)
values
(default, ?, ?)
조회(SELECT) 쿼리
select
article0_.id as id1_0_,
//aliasing 처리가 되었는데 무시.
article0_.content as content2_0_,
article0_.title as title3_0_
from
article article0_
----------------------------------------------------------
조회(SELECT) 특정 게시물 처리 쿼리
select
article0_.id as id1_0_0_,
article0_.content as content2_0_0_,
article0_.title as title3_0_0_
from
article article0_
where
//어디서?
article0_.id=?
//1번
2022-05-05 16:35:16.739 TRACE 8356 --- [nio-8080-exec-4] o.h.type.descriptor.sql.BasicBinder : binding parameter [1] as [BIGINT] - [1]
갱신(UPDATE) 쿼리
update
article
set
content=?,
title=?
where
id=?
2022-05-05 16:37:07.144 TRACE 8356 --- [io-8080-exec-10] o.h.type.descriptor.sql.BasicBinder : binding parameter [1] as [VARCHAR] - [4444]
2022-05-05 16:37:07.144 TRACE 8356 --- [io-8080-exec-10] o.h.type.descriptor.sql.BasicBinder : binding parameter [2] as [VARCHAR] - [라라라라]
2022-05-05 16:37:07.145 TRACE 8356 --- [io-8080-exec-10] o.h.type.descriptor.sql.BasicBinder : binding parameter [3] as [BIGINT] - [1]
삭제(DELETE) 쿼리
delete
from
article
where
id=?
2022-05-05 16:37:51.737 TRACE 8356 --- [nio-8080-exec-2] o.h.type.descriptor.sql.BasicBinder : binding parameter [1] as [BIGINT] - [1]
//1번게시물 삭제처리
기본 SQL 쿼리 연습
http://localhost:8080/h2-console DB 접속
JDBC URL은 이제 고정 값으로 사용하기에 건들 필요가 없다.
테이블 생성이 왜 만들어지는가?
entity/Article 파일에
@entity // DB가 해당 객체를 인식 가능! (해당 클래스로 테이블을 만든다.)
public class Article {
@id // 대표값을 지정! like a 주민등록번호
@GeneratedValue(strategy = GenerationType.IDENTITY) // DB가 id를 자동 생성 어노테이션!
private Long id;
@column // DB에 테이블이라는 단위에 연결해줌.
private String title;
@column
private String content;
}
아래의 쿼리문으로 테이블이 생성된다.
create table article (
id bigint generated by default as identity,
content varchar(255),
title varchar(255),
primary key (id)
);
H2 DB에 실습을 위한 테이블 생성
create table coffee(
id bigint generated by default as identity,
name varchar(255),
price varchar(255),
primary key (id)
);
데이터를 집어 넣기 위해 INSERT문 사용
insert
into
coffee
(id, name, price)
values
(1, '아메리카노', 4100);
insert
into
coffee
(id, name, price)
values
(2, '라떼', 4600),
(3, '모카', 5100),
(4, '오늘의 커피', 3800);
4개의 데이터 삽입
커피데이터 조회
select
id, name, price
from
coffee
where
id = 3;
3번 데이터인 모카 출력
select
id, name, price
from
coffee;
전체 데이터 출력
커피 데이터 갱신
update
coffee
set
price = 9900
where
id=4;
4번 데이터 오늘의 커피 price 가격 변경
커피 데이터 삭제
delete
from
coffee
where
id=4;
4번 데이터 삭제
CRUD와 관련된 SQL 쿼리문을 log 찍어보는 연습과 DB에서 직접 사용해보는 훈련을 해봤습니다.
https://github.com/Giltaehyeong/firstproject/commit/3141bfef2b89e963f17ccc6b46728302d52b3771
[스프링 부트 입문 17]CRUD와 SQL 쿼리 · Giltaehyeong/firstproject@3141bfe
* 학습목표 데이터 CRUD 과정의 SQL 쿼리를 분석하시오. 실습 개요 1. 각 과정에서 수행되는 Query를 log로 확인해보기. 2. 확인된 log로 DB에서 직접 사용해보는 훈련 JPA 로깅 설정. application.properties 파
github.com
소스코드참고.
728x90
'Back-End > SpringBoot' 카테고리의 다른 글
| [스프링 부트 입문 16]데이터 삭제하기 (0) | 2022.05.04 |
|---|---|
| [스프링 부트 입문 15]데이터 수정하기 (0) | 2022.05.04 |
| [스프링 부트 입문 14]수정 폼 만들기 (0) | 2022.05.04 |
| [스프링 부트 입문 13]링크와 리다이렉트 (0) | 2022.05.03 |
| [스프링 부트 입문 12]데이터 목록조회 (0) | 2022.05.03 |