seokjun7410 / hoding

0 stars 1 forks source link

CHAPTER: 3 스프링 데이터를 사용한 데이터베이스 접근 #22

Closed seokjun7410 closed 11 months ago

seokjun7410 commented 11 months ago

CHAPTER 3 스프링 데이터를 사용한 데이터베이스 접근 83 3.1 스프링 데이터 소개 83 3.1.1 왜 스프링 데이터인가? 84 3.1.2 스프링 데이터 모듈 85 3.2 스프링 부트 애플리케이션 데이터베이스 연동 설정 87 3.2.1 기법: 스프링 부트 애플리케이션에서 관계형 데이터베이스 연동 설정 88 3.2.2 기법: 스프링 부트 애플리케이션 몽고DB 설정 93 3.2.3 기법: 스프링 부트 애플리케이션에서 관계형 데이터베이스 초기화 96 3.3 CrudRepository 인터페이스 이해 101 3.3.1 기법: 스프링 데이터 JPA를 사용해서 도메인 객체를 관계형 데이터베이스에서 관리 103 3.3.2 기법: 커스텀 스프링 데이터 리포지터리를 만들어서 관계형 데이터베이스에서 도메인 객체 관리 111 3.4 스프링 데이터를 사용한 데이터 조회 114 3.4.1 쿼리 메서드 정의 114 3.4.2 기법: 관계형 데이터베이스에서 스프링 데이터 JPA를 사용한 커스텀 쿼리 메서드 정의 115 3.4.3 PagingAndSortingRepository를 활용한 페이징 119 3.4.4 PagingAndSortingRepository 인터페이스로 데이터 페이징 및 정렬 119 3.4.5 @NamedQuery를 사용하는 쿼리 123 3.4.6 기법: 관계형 데이터베이스에 저장된 도메인 객체를 NamedQuery로 조회 124 3.5 @Query로 쿼리문 지정 127 3.5.1 기법: @Query 애너테이션을 사용해서 쿼리를 정의하고 관계형 데이터베이스에 저장 된 도메인 객체 조회 127 3.6 Criteria API 사용 132 3.6.1 기법: Criteria API를 사용해서 관계형 데이터베이스에 저장된 도메인 객체 관리 132 3.7 스프링 데이터 JPA와 QueryDSL 136 3.7.1 기법: 관계형 데이터베이스에 저장된 도메인 객체를 QueryDSL로 관리 136 3.7.2 기법: 프로젝션 142 3.8 도메인 객체 관계 관리 144 3.8.1 기법: 스프링 데이터 JPA를 사용해서 관계형 데이터베이스에서 다대다 관계 도메인 객 체 관리 145

seokjun7410 commented 11 months ago

madeBy hoding reference SpringBoot In parctice Date 23.11.24

스프링 데이터 프로젝트

JPA

애플리케이션에서 쿼리를 작성, DB 연결, ORM등 편리성을 제공

하위 모듈

스프링 데이터 모듈

SPRING-DATA commons

히카리 커넥션 풀

관계형 데이터베이스 초기화 방법

설정 방법들

[application.properties] spring.sql.init.mode=always //기본값이 embedded
embedded는 인메모리 DB만 초기화가 실행된다.

스크립트 파일 경로 및 이름 직접 지정

classpath: => src/main/resources

[application.properties] spring.sql.init.schema-locations=classpath:sql/schema/sbip_schema.sql

스프링 데이터 모듈의 interface 관계

classDiagram
    Repository <--> CurdRepository
    Repository <--> PaginingAndSortingRepository
    CurdRepository <--> ListCurdRepository
    PaginingAndSortingRepository <--> ListPaginingAndSortingRepository
    ListCurdRepository <--> JpaRepository
    QueryByExampleExculator <--> JpaRepository
    ListPaginingAndSortingRepository <--> JpaRepository
    class CurdRepository {
    }
    class ListCurdRepository {
    }
    class PaginingAndSortingRepository {
    }
    class ListPaginingAndSortingRepository {
    }
    class QueryByExampleExculator {
    }
    class JpaRepository {
    }

@Repository

커스텀 스프링 데이터 리포지터리 만들기

@NoRepositoryBean // 프록시 객체 생성 X -> 자동 구현체 생성 X
public interface BaseRepoisotry<T,ID> extends Repository<T,ID>{
    <S extends T> S save(S entity);
    Iterable<T> findAll()
}
@Repository
public interface CustomizedCourseRepository extends BaseRepository<T,ID>{}

참고: Slice test annotation

스프링 데이터를 사용한 데이터 조회

  1. 쿼리메소드
    • 메소드 이름으로 쿼리
    • @NameQuery
      • Entity와 관련없는 쿼리코드가 Entity 클래스에 존재하는 단점
    • @Query
      • @Modifiying 조회 외의 JPQL을 사용할때 명시해야 한다.
      • 변경된 컬럼 수를 반환한다 (int,Inetger 반환타입일 경우)
      • 타입 안정성과 쿼리 정적검사가 불가능하다.
  2. Criteria API
    • 타입 안정성과 쿼리 정적검사가 가능하다.
    • 코드양이 많아지는 단점이 있다.
  3. QueryDsl
    • Criteria를 개선한 서드파티 라이브러리
    • 프로젝션
      • 클래스 프로젝션 -> Dto로 프로젝션한다.
      • 인터페이스 프로젝션 -> getter메소드로 프로젝션한다.