반응형 Spring/Querydsl7 스프링 데이터와 Querydsl 실무에서 사용하기 실무에서 사용하기 위해 다음과 같은 설계를 합니다 MemberRepository interface는 JpaRepository 이외에도 MemberRepositoryCustm interface를 상속합니다. MemberRepositoryCustom interface는 search()라는 메서드가 있는데 이는 MemberRepositoryImpl에서 상속하여 구현합니다. 여기서 Querydsl이 사용됩니다. 개발자가 개발한 쿼리문이 사용되는 곳에는 Custom을 붙입니다. 또한 직접 구현하는 클래스 뒤에 Impl이 붙습니다. *MemberRepository public interface MemberRepository extends JpaRepository, MemberRepositoryCu.. 2022. 2. 13. 순수 JPA와 Querydsl 순수 JPA 사용하기 순수 JPA를 사용하여 MemberJpaRepository를 구현합니다 @Repository public class MemberJpaRepository { private final EntityManager em; private final JPAQueryFactory queryFactory; public MemberJpaRepository(EntityManager em) { this.em = em; this.queryFactory = new JPAQueryFactory(em); } public void save(Member member) { em.persist(member); } public Optional findById(Long id) { Member findMember = em... 2022. 2. 13. QueryDsl 수정, 삭제 수정 기본적으로 JPA는 수정, 삭제 시에 1건당 1번의 쿼리문을 날립니다. 연봉 인상같은 전체 적용사항은 한명씩 처리하는 것보다, 한번의 쿼리로 처리하는게 훨씬 효율성이 좋습니다. 이를 벌크 연산이라고 합니다. 수정을 실행해봅니다. 벌크연산은, 모든 member를 영속성 컨텍스트에 올리고 바로 DB에 반영합니다. 그런데, 영속성 컨텍스트에 수정된 값을 반영하지 않기 때문에 영속성 컨텍스트와 DB는 정합성이 맞지 않습니다. //member1 = 10 -> DB member1 //member2 = 20 -> DB member2 //member3 = 30 -> DB member3 //member4 = 40 -> DB member4 long count = queryFactory .update(member) ... 2022. 2. 13. Querydsl 동적쿼리 동적쿼리 사용 2가지 방법 동적 쿼리 사용을 위해서는 2가지 방법이 있습니다. BooleanBuilder Where 다중 파라미터 사용 BooleanBuilder where절에 BooleanBuilder를 넣는 방식입니다. and 혹은 or을 사용할 수 있습니다. 아래는 username과 age를 동적 쿼리로 조회합니다. where 절의 핵심 코드는 아래와 같습니다. ... .where(builder) ... @Test public void BooleanBuilderQuery() { String usernameParam = "member1"; Integer ageParam = 10; List result = searchMember1(usernameParam, ageParam); Assertions.ass.. 2022. 2. 13. QueryDsl 프로젝션 문법 프로젝션 프로젝션이란 select 대상 지정을 의미합니다. 대상이 1개인지 복수개인지에 따라 방식이 달라집니다 셀렉션(selection)은 행 단위의 조회입니다 프로젝션(projection)은 열 단위의 조회입니다. 따라서 프로젝션 조회란, 행이 아닌 열을 중심으로 생각해야 합니다. 1. 프로젝션 대상이 하나 단순히 username만 조회하기 때문에 일반 조회처럼 하면 됩니다. List result = queryFactory .select(member.username) .from(member) .fetch(); 2. 튜플 조회 프로젝트 대상이 둘 이상일 때는 튜플 조회를 사용합니다. @Test public void tupleQuery() { List result = queryFactory .select(.. 2022. 2. 13. QueryDsl 기본문법 QueryDsl 검색 조건 쿼리(From, Where) 검색 조건은 username이 member1, 나이가 10~30살인 사람입니다. select, from은 같은 경우 selectFrom으로 합쳐서 사용할 수 있습니다. where조건은 and로 게속 이어나갈 수 있습니다. @Test public void search() { Member findMember = queryFactory .selectFrom(member) .where(member.username.eq("member1").and(member.age.between(10, 30))) .fetchOne(); Assertions.assertThat(findMember.getUsername()).isEqualTo("member1"); } and 로 .. 2022. 2. 12. JPA & JPQL & QueryDsl 개요 JPA, JPQL, QueryDsl을 사용하여 조회하는 방법을 비교해봅니다. 조회 방식 코드로 테스트해보기 상황은 Team과 Member가 1:N으로 연관관계를 가지고 있다고 가정합니다. EntityManager를 통해 Team과 Member를 생성합니다. N쪽에 연관관계의 주인이기 때문에 FK를 가집니다. JPA 설정에서 주의 할 것은, @ManyToOne 연관관계에서 fetch를 LAZY로 설정해야 합니다.(default는 EAGER입니다.) JPA 기본 데이터 테스트 순수 JPA로, em.createQuery()를 사용해서 쿼리를 만들 수 있습니다. persist로 영속성 컨텍스트에 넣고, flush로 반영하고, 마지막에는 clear로 영속성 컨텍스트에 담긴 모든 것을 초기화합니다. @Spri.. 2022. 2. 12. 이전 1 다음 반응형