일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- pointcut
- JDBC
- db
- 알고리즘
- SpringBoot
- 김영한
- transaction
- Proxy
- jpa
- 스프링 핵심 기능
- kotlin
- Greedy
- java
- Thymeleaf
- 스프링
- Android
- 백준
- Exception
- spring
- 스프링 핵심 원리
- 자바
- QueryDSL
- 그리디
- AOP
- http
- Servlet
- springdatajpa
- 인프런
- JPQL
- Spring Boot
- Today
- Total
목록QueryDSL (27)
개발자되기 프로젝트
1. 쿼리 한번으로 대량 데이터 수정 : 벌크 연산 벌크연산은 영속성 컨텍스트를 거치지 않고 바로 DB에 반영함 즉 벌크연산 후 영속성 컨텍스트와 DB가 다르다. 벌크 연산 후 영속성 컨텍스트를 초기화 해주자. @Test public void bulkUpdate(){ /** * member1 = 10 -> 비회원 * member2 = 20 -> 비회원 * member3 = 30 -> 유지 * member4 = 40 -> 유지 */ long count = queryFactory .update(member) .set(member.username, "비회원") .where(member.age.lt(28)) .execute(); em.flush(); em.clear(); } update Member member..
1. 동적쿼리 두 가지 방법 BooleanBuilder Where 다중 파라미터 사용 2. BooleanBuilder booleanBuilder에 and, or 조건 추가 가능. private List searchMember1(String usernameCon, Integer ageCon) { BooleanBuilder builder = new BooleanBuilder(); if(usernameCon != null){ builder.and(member.username.eq(usernameCon)); //booleanbuild에 and조건 추가 } if(ageCon!=null){ builder.and(member.age.eq(ageCon)); } return queryFactory .selectFrom(..
1. @QueryProjetion DTO의 생성자에 @QUeryProjection 붙여주고 @Data public class MemberDto { private String username; private int age; @QueryProjection public MemberDto(String username, int age) { this.username = username; this.age = age; } public MemberDto() { } } compileQuerydsl을 실행하면 DTO로 Q파일로 만들어줌 ㄷㄷ /** * study.querydsl.dto.QMemberDto is a Querydsl Projection type for MemberDto */ @Generated("com.quer..
1. MemberDto projection할 때 member의 username, age만 projection 하고 싶음. @Data public class MemberDto { private String username; private int age; public MemberDto(String username, int age) { this.username = username; this.age = age; } } 2. JPQL 사용하여 DTO로 조회 순수 JPA에서 DTO를 조회할 때는 new 명령어를 사용 DTO의 package이름을 다 적어줘야해서 귀찮음...... 생성자 방식만 지원함 @Test public void findDtoByJPQL(){ List resultList = em.createQue..
1. 프로젝션 : select의 대상을 지정. 2. 프로젝션 대상이 하나 인 경우 프로젝션 대상이 하나면 타입을 명확하게 지정할 수 있음 프로젝션 대상이 둘 이상이면 튜플이나 DTO로 조회 List result = queryFactory .select(member.username) .from(member) .fetch(); 2. 튜플 조회 프로젝션 대상이 둘 이상일 때 사용 com.querydsl.core.Tuple tuple.get(~)을 통해 데이터 꺼냄. tuple을 repository 계층 내부에서만 사용하고, 외부에는 DTO로 변환하여 내보내자 ㅋㅋ @Test public void tupleProjection(){ List result = queryFactory .select(member.use..
1. 상수 selcrt 안에 Expressions.constant("~~") @Test public void constant(){ List result = queryFactory .select(member.username, Expressions.constant("A")) .from(member) .fetch(); for (Tuple tuple : result) { System.out.println("tuple = " + tuple); } } tuple = [member1, A] tuple = [member2, A] tuple = [member3, A] tuple = [member4, A] 2. 문자 더하기 conacat 사용 ~.stringValue() 문자가 아닌 다른 타입들은 stringValue()..
1. Case문 select, 조건절(where), order by에서 사용 가능 2. 예제 간단한 경우 @Test public void basicCase(){ List result = queryFactory .select(member.age .when(10).then("열살") .when(20).then("스무살") .otherwise("기타")) .from(member) .fetch(); for (String s : result) { System.out.println("s = " + s); } } s = 열살 s = 스무살 s = 기타 s = 기타 복잡한 경우 caseBuilder 생성 필요. @Test public void complexCase(){ List result = queryFactory ..
1. 서브쿼리 쿼리안에 쿼리 넣기 com.querydsl.jpa.JPAExpressions 사용 2. 예제1 : 나이가 가장 많은 회원 조회 /** * 나이가 가장 많은 회원 조회 */ @Test public void subQuery(){ //서브쿼리는 바깥에 있는 alias랑 겹치면 안됨. //QMember새로 만들어줘야함. QMember memberSub = new QMember("memberSub"); List result = queryFactory .selectFrom(member) .where(member.age.eq( JPAExpressions .select(memberSub.age.max()) .from(memberSub) )) .fetch(); assertThat(result).extrac..