본문 바로가기

분류 전체보기

(146)
Querydsl- 정렬과 페이징 예시 초기 조건 package study.querydsl; @SpringBootTest @Transactional public class QuerydslBasicTest { @Autowired EntityManager em; JPAQueryFactory queryFactory; @BeforeEach //각 테스트마다 데이터 주입 public void each(){ queryFactory = new JPAQueryFactory(em); Team teamA = new Team("teamA"); Team teamB = new Team("teamB"); em.persist(teamA); em.persist(teamB); Member member1 = new Member("member1", 10, teamA); ..
Querydsl- Q 인스턴스 Q 인스턴스 사용법 2 가지 QMember member = new QMember("m") // 별칭 직접 지정 QMember member = QMember.member // 기본 인스턴스 사용 일반적으로 기본 인스턴스를 주로 사용한다. 기본 인스턴스와 static import를 사용하면 훨씬 sql 느낌이 나는 직관적인 코드를 작성할 수 있다. 예시 (기본 인스턴스 + static import) package study.querydsl; import com.querydsl.jpa.impl.JPAQuery; import com.querydsl.jpa.impl.JPAQueryFactory; import org.assertj.core.api.Assertions; import org.junit.jupiter.a..
Querydsl- Jpql과 Querydsl 비교 JpaQueryFactory public class QuerydslStudy{ @Autowired private EntityManager em; // JpaQueryFacotry 생성 JpaQueryFactory queryFactory = new JpaQueryFactory(em); 인자로 EntityManager를 받음 } 기본적으로 JPQL을 사용하기 위해서는 EntityManager가 필요한 것 처럼, Querydsl을 사용하기 위해서는 JpaQueryFacotry가 필요하다. JpaQueryFactory를 선언하기 위한 방법은 위와 같다. 테스트 코드로 JPQL과 Querydsl 비교하기 package study.querydsl; import com.querydsl.jpa.impl.JPAQuery..
Querydsl- build.gradle 설정 buildscript { ext { queryDslVersion = "5.0.0" } } plugins { id 'java' id 'org.springframework.boot' version '2.7.14' id 'io.spring.dependency-management' version '1.0.15.RELEASE' //querydsl 추가 id "com.ewerk.gradle.plugins.querydsl" version "1.0.10" } group = 'study' version = '0.0.1-SNAPSHOT' java { sourceCompatibility = '11' } configurations { compileOnly { extendsFrom annotationProcessor } } r..
JPA- Open Session In View OSIV 기본적으로 스프링 프로젝트를 실행하면, warn 로그가 뜨면서 spring.jpa.open-in-view : true 기본값이라고 알려준다. 기본적으로 OSIV 전략은 최초 데이터베이스 커넥션 시작 시점부터 View, API 응답이 끝날 때까지 영속성 컨텍스트와 데이터베이스 커넥션을 유지한다. @PostMapping("/api/v1/members") public CreateMemberResponse saveMemberV1(@RequestBody @Valid Member member) { Long id = memberService.join(member); return new CreateMemberResponse(id); } @Transactional public Long join(Member me..
JPA- DISTINCT DISTINCT join fetch로 컬렉션을 조인하여 조회하는 경우 동일 엔티티가 중복 조회되는 문제가 존재한다. 예를 들어 Team1이라는 엔티티에 Member엔티티 3개(member1, member2, member3)가 매핑 되어있다고 하자. 이때 " select t from Team t join fetch t.members where t.name = "TEAM1" "라는 jpql로 쿼리를 날리게 된다면 이는 sql로 " SELECT T.*, M.* FROM TEAM T JOIN MEMBER M ON T.MEMBER_ID = M.MEMBER_ID WHERE T.NAME = "TEAM1" "로 번역되어 조인된 테이블은 총 세개 row가 만들어질 것이다. 여기서 distinct 키워드를 추가하여 "se..
Swift- 아울렛 변수와 액션 함수 추가 기준 객체를 선택 했을 때 어떤 동작을 수행해야 한다면 액션 함수로 추가하고, 객체의 값을 이용하거나 속성등을 제어해야 한다면 아웃렛 변수 형태로 추가함.
SpringBoot-JPA에서 DTO로 바로 조회하기 package jpabook.jpashop.repository; import jpabook.jpashop.domain.Member; import jpabook.jpashop.domain.Order; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Repository; import org.springframework.util.StringUtils; import javax.persistence.EntityManager; import javax.persistence.TypedQuery; import javax.persistence.criteria.*; import java.util.ArrayList; import java..