사용자 도구

사이트 도구


wiki:spring:jpa:querydsl

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
wiki:spring:jpa:querydsl [2022/09/27 21:40]
dhan
wiki:spring:jpa:querydsl [2023/01/26 10:26] (현재)
dhan
줄 8: 줄 8:
    
 ===== Intro ===== ===== Intro =====
 +
 +
    
 ===== Case Study ===== ===== Case Study =====
 Spring Boot QueryDSL 사용 Spring Boot QueryDSL 사용
- + 
 +  *  [[https://jindory.tistory.com/entry/JPA-Eclipse%EC%97%90%EC%84%9C-QueryDSL-%EC%85%8B%ED%8C%85-%EB%B0%8F-Q-class-Cannot-be-resolved-%EC%97%90%EB%9F%AC-%ED%95%B4%EA%B2%B0-%EB%B0%A9%EB%B2%95|[JPA] Eclipse에서 QueryDsl 설정하기]]
    
 ===== Term ===== ===== Term =====
    
 ===== Tip ===== ===== Tip =====
 +문법
 <code text> <code text>
   @ManyToOne를 사용할 경우 (fetch = FetchType.LAZY)를 항상 사용할 것   @ManyToOne를 사용할 경우 (fetch = FetchType.LAZY)를 항상 사용할 것
줄 46: 줄 50:
   3. nativeSQL을 사용한다.   3. nativeSQL을 사용한다.
      
-  SQL AntiPatterns+  SQL AntiPatterns (책) 
 +  원 쿼리가 복잡하면 조금씩 나눠서 가져오는 것도 방법이다. 
 +   
 +  프로젝션: select 대상 지정 
 +   
 +  Tuple 타입은 querydsl에 종속적인 타입이다. 따라서 repository내에서만 사용하자!! 
 +   
 +  @QueryProjection  
 +  Dto도 Q File로 생성이 됨(compile 진행 필요) 
 +   
 +  동적 쿼리 
 +    실무에서 사용은 Predicate 사용 
 +     
 +  벌크 연산, 대용량 처리, 변경 감지(Dirty Checking) 
 +  벌크 연산은 바로 DB에 처리함, 하지만 영속성 컨텍스트는 예전정보가 있음, 영속성 컨텍스트가 항상 우선권을 가짐 
 +  incompatible read를 방지하기 위해서 
 +    em.flush(); 
 +    em.clear(); 실행 
 +   
 +  테스트 코드에서는 기본적으로 Transactional이 끝나고 롤백함 
 +   
 +  sql function 사용을 하려면 방언(dialect에 등록이 되어야 함, 아니면 구현해야 함)
 </code> </code>
 +
 +실무 활용
 +<code>
 +  동시성 문제는 전혀 없음. 트랜잭션 단위로 움직임
 +  조건절이 있으며 조건이 없으면 데이터를 모두 가져옴
 +  (조건이 없으면 limit라도 있어야 됨)
 +  
 +  Predicate 조건 보다는 BooleanExpression를 사용하면 composition이 가능함
 +  
 +  DB의 테스트 데이터가 중요한 이유는 데이터 변경이 있을 경우
 +  테스트가 모두 깨지기 때문이다.
 +  
 +</code>
 +
 +스프링 데이터 JPA 활용
 +<code>
 +페이징은 제로 인덱스(0부터 시작)
 +
 +QuerydslPredicateExecutor(서비스)
 +스프링 데이터 JPA가 제공하는 Querydsl 기능은 실무 환경에서는 다소 사용하기 부족(제약사항이 있음)
 +묵시적 조인은 가능하지만 left join이 블가능
 + * 클라이언트 코드가 Querydsl에 의존적임(컨트롤러나 서비스에 Querydsl 코드가 있음)
 +
 +Querydsl Web 지원(컨트롤러)
 +웹 파라미터를 바로 Predicator로 지정 가능
 +하지만 복잡할 경우 QuerydslBinderCustomizer을 구현해야 됨 (가성비가 없음)
 +또한 컨트롤러가 Querydsl에 의존함
 +
 +QuerydslRepositorySupport
 +  장점: 페이지 처리에 유용함
 +        EntityManager 제공
 +  단점: Querydsl 3.x버전을 대상으로 만듦
 +        from 부터 해야 됨(select가 먼저 올 수 없음)
 +        소트는 오류가 발생할 수 있음.
 +</code>
 +
 +Querydsl 지원 클래스(유틸) 만들기
 +<code>
 +
 +
 +
 +</code>
 +
 +
 +
 +
 +
  
   * [[https://bgpark.tistory.com/157|[QueryDsl] Can not find symbol 에러 해결]]   * [[https://bgpark.tistory.com/157|[QueryDsl] Can not find symbol 에러 해결]]
/volume1/web/dokuwiki/data/attic/wiki/spring/jpa/querydsl.1664282420.txt.gz · 마지막으로 수정됨: 2022/09/27 21:40 저자 dhan