728x90

Programming/Querydsl 8

Querydsl - 중급 문법 (3) 수정, 삭제 벌크 연산 / SQL function 호출

- 쿼리 한번으로 대량 데이터 수정 - 수정, 삭제의 벌크 연산의 경우 영속성 컨텍스트를 통하는 것이 아닌 DB에 직접 쿼리를 날리는 것이기 때문에, 영속성 컨텍스트의 데이터와 불일치하는 상황이 발생한다. - 영속성 컨텍스트와 DB의 데이터를 일치시켜주지 않을 경우 데이터 일치성에 있어서 큰 문제가 발생 할 수 있다. @Test public void bulkUpdate() { queryFactory .update(member) .set(member.username, "비회원") .where(member.age.lt(28)) .execute(); - 위와 같이 코드를 작성하여 실행하게 되면 where문의 조건에 맞게 DB의 데이터들은 변경되지만 영속성 컨텍스트의 값은 해당 조건과 무관하게 변경되지 않는다...

Querydsl - 중급 문법 (2) 동적 쿼리

- 동적 쿼리 1. BooleanBuilder 사용 2. where 다중 파라미터 사용 1. BooleanBuilder @Test public void dynamicQuery_BooleanBuilder() { String usernameParam = "member1"; // Integer ageParam = 10; Integer ageParam = null; List result = searchMember1(usernameParam, ageParam); assertThat(result.size()).isEqualTo(1); } private List searchMember1(String usernameParam, Integer ageParam) { BooleanBuilder builder = new Bo..

Querydsl - 중급 문법 (1) (프로젝션)

- 프로젝션과 결과 반환 - 기본 - 프로젝션 : select 대상 지정 - 프로젝션 대상이 하나 List result = queryFactory .select(member.username) .from(member) .fetch(); - 프로젝션 대상이 하나면 타입을 명확하게 지정할 수 있다. - 프로젝션 대상이 둘 이상이면 Tuple이나 DTO로 조회해야 한다. - 튜플 조회 - 프로젝션 대상이 둘 이상일 때 사용한다. @Test public void Tuple() { List result = queryFactory .select(member.username, member.age) .from(member) .fetch(); for (Tuple tuple : result) { String username..

Querydsl - 기본 문법 (3) (조인, 서브 쿼리, Case문, 상수, 문자 더하기)

- 조인 - 기본 조인 /* * 팀 A에 소속된 모든 회원 * */ @Test public void join() { List result = queryFactory .selectFrom(member) .join(member.team, team) .where(team.name.eq("teamA")) .fetch(); assertThat(result) .extracting("username") .containsExactly("member1", "member2"); } - join(member.team, team)을 통해 join을 할 수 있다. join만 작성하게 되면 inner join을 기본으로 한다. - 조인 - ON절 /* * 회원과 팀을 조인하면서, 팀 이름이 teamA인 팀만 조인, 회원은 모두 ..

Querydsl - 기본 문법 (2) (결과 조회, 정렬, 페이징, 집합)

- 결과 조회 1. fetch() : 리스트 조회, 데이터 없으면 빈 리스트 반환 2. fetchOne() : 단 건 조회 2.1. 결과가 없으면 : null 2.2. 결과가 둘 이상이면 : NonUniqueResultException 예외 발생 3. fetchFirst() : limit(1).fetchOne() 4. fetchResults() : 페이징 정보 포함, total count 쿼리 추가 실행 5. fetchCount() : count 쿼리로 변경해서 count 수 조회 @Test public void resultFetch() { // List fetch = queryFactory // .selectFrom(member) // .fetch(); // // Member fetchOne = que..

Querydsl - Querydsl 설정

- Querydsl의 경우 설정이 간단하지 않다. - Spring Boot를 통해 프로젝트를 생성한 상태에서 진행한다. - build.gradle plugins { id 'java' id 'org.springframework.boot' version '2.7.14' id 'io.spring.dependency-management' version '1.0.15.RELEASE' } group = 'study' version = '0.0.1-SNAPSHOT' java { sourceCompatibility = '11' } configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } depende..

728x90