Spring-Boot
-
7. 스프링 데이터 JPA가 제공하는 Querydsl 기능Spring-Boot/실전! Querydsl 2023. 3. 31. 09:21
- 여기서 소개하는 기능은 제약이 커서 복잡한 실무 환경에서 사용하기에는 많이 부족하다. - 그래도 스프링 데이터에서 제공하는 기능이므로 간단히 소개하고, 왜 부족한지 설명한다. 1. 인터페이스 지원 - QuerydslPredicateExecutor public interface MemberRepository extends JpaRepository, MemberRepositoryCustom, QuerydslPredicateExecutor { } @Test public void querydslPredicateExecutorTest() { QMember member = QMember.member; Iterable result = memberRepository.findAll(member.age.between(..
-
6. 실무 활용 - 스프링 데이터 JPA와 QuerydslSpring-Boot/실전! Querydsl 2023. 3. 30. 15:00
1. 스프링 데이터 JPA 리포지토리로 변경 2. 사용자 정의 리포지토리 * 사용자 정의 리포지토리 사용법 * 1. 사용자 정의 인터페이스 작성 2. 사용자 정의 인터페이스 구현 3. 스프링 데이터 리포지토리에 사용자 정의 인터페이스 상속 * 쿼리가 복잡하거나 특화된 기능, 공용성없고, 특정 API에 종속시에는 class를 분리해서 만들어준다. 3. 스프링 데이터 페이징 활용1 - Querydsl 페이징 연동 - 스프링 데이터의 Page, Pageable을 활용 - 전체 카운트를 한번에 조회하는 단순한 방법 - 데이터 내용과 전체 카운트를 별도로 조회하는 방법 4. 스프링 데이터 페이징 활용2 - CountQuery 최적화 - 스프링 데이터 라이브러리가 제공 - count 쿼리가 생략 가능한 경우 생략해..
-
4. 실무 활용 - 순수 JPA와 QuerydslSpring-Boot/실전! Querydsl 2023. 3. 20. 14:58
1. 순수 JPA 리포지토리와 Querydsl - 순수 JPA 리포지토리와 Querydsl - 동적쿼리 Builder 적용 - 동적쿼리 Where 적용 - 조회 API 컨트롤러 개발 * 참고 : 동시성 문제는 걱정하지 않아도 된다. - 왜냐하면 여기서 스프링이 주입해주는 엔티티 매니저는 실제 동작 시점에 진짜 엔티티 매니저를 찾아주는 프록시용 가짜 엔티티 매니저이다. - 이 가짜 엔티티 매니저는 실제 사용 시점에 트랜잭션 단위로 실제 엔티티 매니저(영속성 컨텍스트)를 할당해준다. 2. 동적 쿼리와 성능 최적화 조회 - Builder 사용 3. 동적 쿼리와 성능 최적화 조회 - Where절 파라미터 사용 4. 조회 API 컨트롤러 개발
-
3. 중급 문법Spring-Boot/실전! Querydsl 2023. 3. 17. 18:11
1. 프로젝션과 결과 반환 - 기본 - 프로젝션 : select 대상 지정 프로젝션 대상이 하나 List result = queryFactory .select(member.username) .from(member) .fetch(); - 프로젝션 대상이 하나면 타입을 명확하게 지정할 수 있음 - 프로젝션 대상이 둘 이상이면 튜플이나 DTO로 조회 튜플 조회 - 프로젝션 대상이 둘 이상일 때 사용 - `com.querydsl.core.Tuple` * tuple 도 repository 계층안에서만 쓰는 것을 권장 2. 프로젝션과 결과 반환 - DTO 조회 * 순수 JPA에서 DTO 조회 * - 순수 JPA에서 DTO를 조회할 때는 new 명령어를 사용해야함 - DTO의 package 이름을 다 적어줘야해서 지..
-
2. 기본문법Spring-Boot/실전! Querydsl 2023. 3. 13. 17:53
1. 시작 - JPQL vs Querydsl 2. 기본 Q-Type 활용 * Q 클래스 인스턴스를 사용하는 2가지 방법 * // java QMember qMember = new QMember("m");// 별칭 직접 지정 QMember qMember = QMember.member;// 기본 인스턴스 사용 3. 검색 조건 쿼리 - JPQL이 제공하는 모든 검색 조건 제공 member.username.eq("member1") // username = 'member1' member.username.ne("member1") //username != 'member1' member.username.eq("member1").not() // username != 'member1' member.username.isNot..
-
1. 프로젝트 환경설정 & 예제 도메인 모델Spring-Boot/실전! Querydsl 2023. 3. 8. 18:30
Querydsl ㆍ쿼리를 자바 코드로 작성 ㆍ문법 오류를 컴파일 시점에 ㆍ동적 쿼리 문제 해결 ㆍ쉬운 SQL 스타일 문법 1. 프로젝트 생성 2. Querydsl 설정과 검증 3. 라이브러리 살펴보기 * gradle 의존관계 보기* `./gradlew dependencies --configuration compileClasspath` * Querydsl 라이브러리 살펴보기 * - querydsl - apt : Querydsl 관련 코드 생성 기능 제공 - querydsl - jpa : querydsl 라이브러리 4. H2 데이터베이스 설치 5. 스프링 부트 설정 - JPA, DB 1. 예제 도메인 모델과 동작확인
-
6. 나머지 기능들Spring-Boot/실전! 스프링 데이터 JPA 2023. 2. 24. 10:43
실무에서 쓰기는 애매한 기술들. 1. Specifications (명세) - 실무에서 쓰지마라! - 책 도메인 주도 설계(Domain Driven Design) 는 SPECIFICATION(명세) 라는 개념을 소개 - 스프링 데이터 JPA는 JPA Criteria를 활용해서 이 개념을 사용할 수 있도록 지원 * 술어(predicate) * - 참 또는 거짓으로 평가 - AND OR 같은 연산자로 조합해서 다양한 검색조건을 쉽게 생성(컴포넌트 패턴) - 예) 검색 조건 하나하나 - 스프링 데이터 JPA는 `org.springframework.data.jpa.domain.Specification` 클래스로 정의 * 명세 기능 사용 방법 * * `JpaSpecificationExecutor` 인터페이스 상속 ..
-
5. 스프링 데이터 JPA 분석Spring-Boot/실전! 스프링 데이터 JPA 2023. 2. 23. 18:16
1. 스프링 데이터 JPA 구현체 분석 - 스프링 데이터 JPA가 제공하는 공통 인터페이스의 구현체 ㆍ`org.springframework.data.jpa.repository.support.SimpleJpaRepository` - `@Repository` 적용 : JPA 예외를 스프링 추상화한 예외로 변환 - `@Transactional` 트랜잭션 적용 ㆍJPA의 모든 변경은 트랜잭션 안에서 동작 ㆍ스프링 데이터 JPA는 변경(등록, 수정, 삭제) 메서드를 트랜잭션 처리 ㆍ서비스 계층에서 트랜잭션을 시작하지 않으면 리파지토리에서 트랜잭션 시작 ㆍ서비스 계층에서 트랜잭션을 시작하면 리파지토리는 해당 트랜잭션을 전파 받아서 사용 ㆍ그래서 스프링 데이터 JPA를 사용할 때 트랜잭션이 없어도 데이터 등록, 변경..