[Spring Boot] #17. CRUD와 SQL 쿼리

gogori6565·2024년 7월 12일
0

스프링 부트 공부

목록 보기
14/20

👉 Mission. 데이터 CRUD 과정의 SQL 쿼리를 분석하시오


SQL Query

쿼리(Query) : DB에게 수행을 요청하는 구문

  • INSERT(생성), SELECT(조회), UPDATE(수정), DELETE(삭제)

💻 실습

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

  • 기본키 생성을 DB에게 위임하는 것이다.
  • Id 값을 null로 하면 DB가 알아서 자동 증가(AUTO_INCREMENT) 해준다.

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 [스프링 부트 입문 - 홍팍]

profile
p(´∇`)q

0개의 댓글