👉 Mission. 데이터 CRUD 과정의 SQL 쿼리를 분석하시오
쿼리(Query) : DB에게 수행을 요청하는 구문
1. JPA 로깅 설정
파일명 : resources/application.properties
#JPA 로깅 설정
#디버그 레벨로 쿼리 출력
logging.level.org.hibernate.SQL=DEBUG
#이쁘게 보여주기
spring.jpa.properties.hibernate.format_sql=true
#파라미터 보여주기
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE
#DB URL 고정 설정
#유니크 URL 생성 X
spring.datasource.generate-unique-name=false
#고정 url 설정
spring.datasource.url=jdbc:h2:mem:testdb;MODE=MySQL
고정 url 설정으로 이제 localhost:8080/h2-console 에 접속할 때 jdbc:h2:mem:testdb 이 주소로 (고정적) 접속하면 된다.
2. ID 자동 생성 전략
전 시간 더미 데이터 생성으로 이제 서버를 껐다 켜도 데이터가 남아있는 대신 오류가 하나 발생했다.
바로 새로 작성한 글이 id값이 1번으로 들어가서 (더미데이터랑) 겹치는 오류인데 이를 해결해보도록 하자.
파일명 : eneity/Article.java
...
public class Article {
@Id //대표값을 지정! like a 주민등록번호
@GeneratedValue(strategy = GenerationType.IDENTITY) //DB가 id를 자동 생성하는 어노테이션
private Long id;
...
}
strategy = GenerationType.IDENTITY
란?
: 기본키 매핑 시 자동 생성 전략 4가지 중 하나인 IDENTITY
➕ IDENTITY 전략의 특징
IDENTITY 전략은
entityManager.persist()
시점에 즉시 INSERT SQL을 실행하고 DB에서 식별자를 조회하여 영속성 컨텍스트의 1차 캐시에 값을 넣는다.
entityManager.persist()
: 엔티티 객체를 영속성 컨텍스트에 추가하는 메서드- 영속성 컨텍스트 : JPA에서, 엔티티 객체들을 관리하고 그 상태를 유지하는 일종의 메모리 공간. 쉽게 말해, DB에 저장된 객체들을 임시로 저장하고 관리하는 곳
- 1차 캐시 : 영속성 컨텍스트 내부에 1차 캐시가 존재하여, 데이터베이스에서 조회한 엔티티 객체를 메모리에 캐시한다. 같은 엔티티 객체를 다시 조회하면, 데이터베이스에 다시 접근하는 대신 1차 캐시에서 가져온다.
📌 생성(INSERT) 쿼리
📌 조회(SELECT) 쿼리
목록조회
단건조회
📌 갱신(UPDATE) 쿼리
📌 삭제(DELETE) 쿼리
강의 출처 : https://www.youtube.com/watch?v=_vDACE13Ubc&list=PLyebPLlVYXCiYdYaWRKgCqvnCFrLEANXt&index=1 [스프링 부트 입문 - 홍팍]