# 데이터 CRUD와 SQL 쿼리
## 미션
데이터 CRUD 과정 중 발생하는 SQL 쿼리를 분석하시오.
![홍팍-스프링-부트-입문-데이터-CRUD-쿼리-미션](http://drive.google.com/thumbnail?export=view&sz=w960&id=1e22578MECIy50rboYc8P9C6J9cmPChff)
## 01:36 JPA 로깅 설정 - application.properties
#### ../resources/application.properties
```
# 09강: h2 DB, 웹 콘솔 설정
spring.h2.console.enabled=true
# 15강: data.sql 적용을 위한 설정(스프링부트 2.5 이상)
spring.jpa.defer-datasource-initialization=true
# 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 설정
spring.datasource.url=jdbc:h2:mem:testdb
```
## 05:49 ID 자동 생성 전략
#### ../entity/Article
```
package com.example.firstproject.entity;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.ToString;
import javax.persistence.*;
@Entity
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Getter
public class Article {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY) // 자동 생성 전략
private Long id;
@Column
private String title;
@Column
private String content;
}
```
#### ⚠️ 생성 전략을 변경하였다면, data.sql에서 id 입력을 제거해주세요
```
-- 15강: article 더미 데이터
-- 17강: article 더미 데이터에서 id 정보를 제거
INSERT INTO article(title, content) VALUES('가가가가', '1111');
INSERT INTO article(title, content) VALUES('나나나나', '2222');
INSERT INTO article(title, content) VALUES('다다다다', '3333');
```
## 10:35 기본 SQL 쿼리 연습
#### 커피 테이블 생성
```
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
;
```
## 🔥 구글링 훈련하기
- JPA 쿼리 로그
- JPA GeneratedValue IDENTITY
- SQL CREATE TABLE
- SQL UPDATE
- SQL DELETE
- SQL WHERE 사용법