Java
-
맨날 까먹는 AOP 정리Java/Spring 2019. 7. 20. 01:57
AOP 는 Aspect-Oriented Programming 의 약자입니다. AOP 로 로직상에서 문제를 해결하고자 하는 핵심 기능과 공통 기능을 분리하는 프로그래밍 방법입니다. AOP 의 주요 키워드 Target 공통 기능을 부여할 대상입니다. 즉, 핵심 기능을 담당하는 비즈니스 로직이고, 어떤 관심사들과도 관계를 맺지 않습니다. Aspect 여러 핵심 기능에 적용될 관심사 모듈입니다. Aspect 에는 구체적인 기능을 구현한 Advice 와 Advice 가 어디에서 적용될지를 결정하는 PointCut 을 포함하고 있습니다. Advice Advice 는 공통 기능을 담은 구현체입니다. Advice 는 Aspect 가 무엇을 언제 적용할 지를 정의합니다. PointCut PointCut 은 공통 기능이 ..
-
QueryDSL 서브 쿼리 사용법Java/JPA 2019. 7. 14. 17:44
QueryDSL 에서는 서브 쿼리도 작성이 가능합니다. 다만 모든 절에서 지원하는 것은 아니고, select 절과 where 절에서만 지원합니다. 먼저 select 절에서의 서브 쿼리를 보겠습니다. @Data @NoArgsConstructor @AllArgsConstructor public class MemberCountDTO { private String teamName; private Long memberCount; } 우선 쿼리의 결과로 팀의 이름과, 팀에 속한 멤버들의 수를 담는 DTO 클래스입니다. SELECT 절에서의 SubQuery @Test public void simpleSubQueryTest() { QMember m = QMember.member; QTeam t = QTeam.team;..
-
[QueryDSL] select 절에서 조회 대상 지정 방법Java/JPA 2019. 7. 13. 22:33
QueryDSL을 이용하여 entity 전체를 가져오는 방법 말고, 조회 대상을 지정하여 원하는 값만 조회하는 것을 프로젝션이라고 합니다. 프로젝션 대상이 하나일 경우에는 반환되는 타입이 프로젝션 대상의 타입입니다. @Test public void oneProjectionTest() { QMember m = QMember.member; query.select(m.name) .from(m) .fetch() .stream() .forEach(name -> log.info("name is : " + name)); } 위의 결과를 보면 Member 엔티티의 name은 String 타입이므로 프로젝션 대상이 하나일 때, List 타입이 조회 결과로 반환되는 것을 볼 수 있습니다. 만약 두 개 이상일 경우에는 어떤..
-
JPA QueryDSL 시작해보기Java/JPA 2019. 7. 11. 22:41
회사에서 Criteria를 사용하다 보니 그동안 jpa를 사용하면서 복잡한 쿼리는 Criteria를 이용하여 작성하였습니다. 하지만 많은 회사들이 QueryDSL을 사용하고 있고, Criteria보다 더 직관적인 코드를 작성할 수 있다기에 QueryDSL에 대해서 공부해보려고 합니다. :) 우선 위와 같은 의존성을 설정하여 프로젝트를 생성하였습니다. 데이터베이스는 따로 구축하지 않고 편하게 테스트하기 위해 H2 Database를 이용하려고 합니다. application.yml spring: profiles: active: local # 기본 환경 선택 datasource: data: classpath:data-h2.sql # local 환경 --- spring: profiles: local jpa: sh..