Tools & Libraries 16

[Querydsl] 순수 JPA와 Querydsl 1. (순수 JPA 리포지토리에서 querydsl 사용해보기)

순수 JPA 리포지토리와 Querydsl이제 순수 JPA 리포지토리에서 Querydsl을 활용해보자@Repositorypublic class MemberJPARepository { private final EntityManager em; private final JPAQueryFactory queryFactory; public MemberJPARepository(EntityManager em) { this.em = em; this.queryFactory = new JPAQueryFactory(em); }우선 위와 같이 순수 JPA 리포지토리를 만들고여러 기본 메소드들을 만들어주자 public void save(Member member){ em.persi..

[Querydsl] Querydsl 중급문법 3 (동적 쿼리 - where절 이용, 벌크 연산)

동적쿼리where 다중 파라미터 사용@Testpublic void dynamicQuery_WhereParam(){ String usernameParam = "member1"; Integer ageParam = 10; // 동적 쿼리로 이름이 member1이고 나이가 10살인 사람을 찾고 싶은 상황 List result = searchMember2(usernameParam,ageParam); Assertions.assertThat(result.size()).isEqualTo(1);} 동적 쿼리로 들어오는 이름과 나이 변수에 맞춰 다른 값을 리턴시켜보자. private List searchMember2(String usernameCond, Integer ageCond){ JP..

[Querydsl] Querydsl 중급문법 2 (@QueryProjection, 동적쿼리 - BooleanBuilder)

프로젝션 결과 반환 - @QueryProjection@Datapublic class MemberDto { private String username; private int age; public MemberDto(){} @QueryProjection public MemberDto(String username, int age) { this.username = username; this.age = age; }}우선 위의 방법을 사용하기 위해선 다음과 같이 생성자에 @QueryProjection 어노테이션을 적어주고 Q타입을 생성해줘야 한다. @Generated("com.querydsl.codegen.DefaultProjectionSerializer")p..

[Querydsl] Querydsl 중급문법 1 (프로젝션과 결과 반환 - Dto)

프로젝션과 결과 반환 - 기본프로젝션이란 select 대상을 지정하는 것을 프로젝션이라 한다. 프로젝션 대상이 하나인 경우@Testpublic void simpleProjection(){ JPAQueryFactory queryFactory = new JPAQueryFactory(em); List result = queryFactory.select(member.username) .from(member) .fetch(); for (String s : result) { System.out.println("s = " + s); }} 프로젝션 대상이 하나면 타입을 String과 같이 명확하게 지정할 수 있다. 만약 프로젝션 대상이 둘 이상이..

[Querydsl] Querydsl 기본문법 4 (on 절, 페치 조인, 서브쿼리)

on 절조인 대상 필터링예) 회원과 팀을 조인하면서, 팀 이름이 teamA인 팀만 조인, 회원은 모두 조회 //jpql: select m,t from Member m left join m.team t on t.name = 'teamA'@Testpublic void join_filtering(){ JPAQueryFactory queryFactory = new JPAQueryFactory(em); List result = queryFactory.select(member, team) .from(member) .join(member.team) .on(team.name.eq("teamA")) .fetch(); for (..

[Querydsl] Querydsl 기본문법 2 (검색 조건, 결과 조회, 정렬, 페이징)

검색 조건 쿼리@Testpublic void search(){ Member findMember = queryFactory .selectFrom(member) .where(member.username.eq("member1") .and(member.age.eq(10))) .fetchOne(); Assertions.assertThat(findMember.getUsername()).isEqualTo("member1");} 우선 다음과 같이 테스트 코드를 작성해주었다. where절에서는 위와 같이 메소드 형식으로 and, or 을 비롯한 무수하게 많은 검색 조건을 제공한다. equal, not equalmemb..