BackEnd/Querydsl
-
13. Querydsl 활용 (Spring Data JPA 적용)BackEnd/Querydsl 2021. 7. 30. 21:54
[전체소스코드] 1. 프로파일 설정 (main 코드와 테스트 코드 실행 시 프로파일 분리) > src/main/resources/application.yml > src/test/resources/application.yml 2. 샘플데이터 추가 > InitMember.java 3. DTO 추가 > MemberTeamDto.java (Qtype 생성을 위해 ./gradlew compileQuerydsl (우측 Gradle querydsl > Tasks > other > compileQuerydsl)) > MemberSearchCondition.java 4. 사용자 정의 Repository 1) 사용자 정의 인터페이스 작성 MemberRepositoryCustom.java 2) 사용자 정의 인터페이스 구현 ..
-
12. Querydsl SQL functionBackEnd/Querydsl 2021. 7. 29. 21:11
[전체소스코드] SQL function은 JPA와 같이 Dialect에 등록된 내용만 호출할 수 있다. 1. Replace String result = queryFactory .select(Expressions.stringTemplate("function('replace', {0}, {1}, {2})", member.username, "member", "M")) .from(member) .fetchFirst(); // result : M1 2. lower String result = queryFactory .select(member.username) .from(member) // .where(member.username.eq(Expressions.stringTemplate("function('lower'..
-
11. Querydsl Update/Delete BulkBackEnd/Querydsl 2021. 7. 29. 20:50
[전체소스코드] (주의) JPQL 배치와 마찬가지로, 영속성 컨텍스트에 있는 엔티티를 무시하고 실행되기 때문에 배치 쿼리를 실행하고 나면 영속성 컨텍스트를 초기화 하는 것이 안전하다. 1. Update long count = queryFactory .update(member) .set(member.username, "비회원") /** 기존 숫자에 더하기 .set(member.age, member.age.add(1)) 기존 숫자에 곱하기 .set(member.age, member.age.multiply(2)) */ .where(member.age.lt(28)) .execute(); 2. Delete long count = queryFactory .delete(member) .where(member.age...
-
10. Querydsl Dynamic Query (동적쿼리)BackEnd/Querydsl 2021. 7. 29. 20:37
[전체소스코드] 1. BooleanBuilder private List searchMember1(String usernameCond, Integer ageCond) { BooleanBuilder builder = new BooleanBuilder(); if (usernameCond != null) { builder.and(member.username.eq(usernameCond)); } if (ageCond != null) { builder.and(member.age.eq(ageCond)); } return queryFactory .selectFrom(member) .where(builder) .fetch(); } 2. Where 다중 파라미터 > where 조건에 null 값은 무시된다. > 메서드를 ..
-
08. Querydsl ProjectionBackEnd/Querydsl 2021. 7. 27. 08:57
[전체소스코드] 1. 프로젝션이란? > 프로젝션이란 SELECT 대상 지정을 의미한다. 아래와 같이 프로젝션 대상이 하나인 경우 명확하게 타입을 지정할 수 있으나 프로젝션 대상이 둘 이상이면 튜플(Tuple)이나 DTO로 조회해야 한다. List result = queryFactory .select(member.username) .from(member) .fetch(); 2. Querydsl DTO 반환 > JPA에서 DTO를 조회할 때는 new 명령어로 package이름을 다 적어주어야 한다. (생성자 방식만 지원) em.createQuery("select new com.spring.querydsl.dto.MemberDto(m.username, m.age) from Member m", MemberDto..
-
07. Querydsl 상수, 문자 더하기BackEnd/Querydsl 2021. 7. 27. 08:37
[전체소스코드] // 상수더하기 Tuple result = queryFactory .select(member.username, Expressions.constant("A")) .from(member) .fetchFirst(); System.out.println(result); // result : [member1, A] // 문자더하기 String result = queryFactory .select(member.username.concat("_").concat(member.age.stringValue())) .from(member) .where(member.username.eq("member1")) .fetchOne(); System.out.println(result); // result : membe..
-
06. Querydsl CaseBackEnd/Querydsl 2021. 7. 27. 08:25
[전체소스코드] [Case1] List result = queryFactory .select(member.age .when(10).then("열살") .when(20).then("스무살") .otherwise("기타")) .from(member) .fetch(); [Case2] List result = queryFactory .select(new CaseBuilder() .when(member.age.between(0, 20)).then("0~20살") .when(member.age.between(21, 30)).then("21~30살") .otherwise("기타")) .from(member) .fetch(); [Case3] /** * orderBy에서 Case문 함께 사용하기 * Querydsl은 자..