본문 바로가기
728x90
반응형

자바51

[JPA/Java] JPQL fetch join (패치 조인) JPQL에는 fetch 조인이라는게 있는데 이게 실무에서 정말정말 중요하다고 한다. 패치 조인(fetch)은 SQL 조인의 종류가 아닌데, JPQL에서 성능 최적화를 위해서 제공하는 기능이다. 연관된 엔티티나 컬렉션을 SQL 한 번에 함께 조회하는 기능을 제공한다. "join fetch" 와 같이 명령어를 사용한다. 패치 조인은 LEFT JOIN FETCH [OUTER 생략 가능] / INNER JOIN FETCH 와 같이 조인 경로를 쓰면 된다. 엔티티 패치 조인은 회원을 조회하면서 연관된 팀도 함께 조회한다. (SQL을 날리는 트랜잭션 한 번에) SQL을 보면 회원 뿐만 아니라 팀(T.*)도 함께 SELECT 된다. [JPQL] select m from Member m join fetch m.team.. 2023. 5. 10.
[JPA/Java] JPQL 경로 표현식 JPQL에는 경로 표현식이라는 개념이 있다. 경로표현식이란? .(점)을 찍어서 객체 그래프를 탐색하는 것이다. 예를 들면 아래와 같은 개념으로 이해하면 된다. 경로 표현식에는 두 개념이 있다. 상태 필드와 연관 필드인데, 상태 필드(state field)는 단순히 값을 저장하기 위한 필드이다. 예를 들면 m.username 과 같이 SELECT 문에서 사용하는 것처럼.. 연관 필드(association field)는 연관관계를 위한 필드인데, 단일 값 연관 필드가 있고, 컬렉션 값 연관 필드가 있다 (1) 단일 값 연관 필드 : - @ManyToOne, @OneToOne, 대상이 엔티티(ex : m.team) (2) 컬렉션 값 연관 필드 : - @OneToMany, @ManyToMany, 대상이 컬렉션(.. 2023. 5. 10.
[JPA/Java] JPQL 기본함수 및 사용자 정의 함수 호출 JPQL은 웬만한 DBMS가 제공하는 기본적인 함수들을 제공하고 있다. 함수명 용도 CONCAT 문자열 이어 붙이기 SUBSTRING 부분 문자열 만들기 TRIM 빈 공백 없애기 LOWER, UPPER 소문자, 대문자 LENGTH 문자열의 길이 LOCATE 문자열의 위치(Integer 값) ABS, SQRT, MOD 절대값, 제곱근, 나누기 SIZE, INDEX(JPA 용도) 컬렉션(또는 엔티티)의 전체 크기, 컬렉션의 위치 예시) CONCAT String jpql = ""; // uninject language를 적용하면 된다. 방법 : 해당 문자열 내에서 ALT + ENTER 누르면 안내문이 나옴 jpql = "select 'a' || 'b' From Member m"; List resultList .. 2023. 5. 10.
[JPA/Java] JPQL CASE 문, COALESCE, NULLIF JPQL도 SELECT 문에 CASE 문을 사용할 수 있다. JPQL 기본 CASE 식 String query = "select " + " case when m.age = 60 then '경로요금' " + " else '일반요금' " + " end " + " from Member m"; 단순 CASE 식 String query = "select " + " case t.name " + " when '팀A' then '인센티브110%' " + " when '팀B' then '인센티브120%' " + " else '인센티브105%' " + " end " + " from Team t"; JPQL CASE 예시) JpaMain.java Team team = new Team(); team.setName("teamA.. 2023. 5. 9.
[JPA/Java] JPQL 타입 표현과 기타식 JPQL에서 타입 표현은 아래와 같이 가능하다. (1) 문자 : 'HELLO', 'She''s' : ' 를 표현하려면 두번 적으면 된다. (2) 숫자 : 10L(Long), 10D(Double), 10F(Float) (3) Boolean : TRUE, FALSE (4) ENUM : jpabook.MemberType.Admin (패키지명 포함) 예시) ① MemberType.java 생성 package jpql; public enum MemberType { ADMIN, USER } ② Member.java 에 MemberType type 추가 @Enumerated(EnumType.STRING) private MemberType type; public MemberType getType() { return t.. 2023. 5. 9.
[JPA/Java] JPQL 서브쿼리 JPQL 에서도 서브쿼리를 사용할 수 있다. JPQL 서브쿼리 예시를 보면 예시) 나이가 평균보다 많은 회원 String jpql = "SELECT m FROM Member m WHERE m.age > (SELECT avg(m2.age) FROM Member m2)" 예시) 한 건이라도 주문한 고객 String jpql = "SELECT m FROM Member m WHERE (SELECT count(o) FROM Order o WHERE m = o.member) > 0" 서브 쿼리에서 지원되는 함수가 몇 있다. 1) [NOT] EXISTS (subquery) : 서브쿼리에 결과가 존재하면 참 - {ALL | ANY | SOME} (subquery) - 모두 만족하면 참 - ANY, SOME : 같은 의.. 2023. 5. 9.
728x90
반응형