목록전체 글 (146)
BE전문가 프로젝트
JPQL 기본 함수 CONCAT SUBSTRING TRIM LOWER, UPPER LENGTH LOCATE ABS, SQRT, MOD SIZE, INDEX(JPA용도) 사용자 정의 함수 하이버네이트는 사용전 방언에 추가해야한다. 사용하는 DB방언을 상속 받고, 사용자 정의 함수를 등록한다. SELECT function('group_concat', i.name) from Item i 각각의 DB에서 사용하는 함수들은 대부분 JPA에 등록이 되어있기 때문에 찾아보고 사용이 가능하다. 따라서 등록되어있지 않은 함수들은 위에서 사용한것 처럼 따로 정의를 해줘야 한다. package dialect; import org.hibernate.dialect.MySQL8Dialect; import org.hibernate..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/JMex1/btrQCiwHzv1/isvURuulc7JJV87WUG9sv0/img.png)
COALESCE: 하나씩 조회해서 null이 아니면 반환 NULLIF: 두 값이 같으면 null 반환, 다르면 첫번쨰 값 반환 표준함수이기 때문에 어떤 DB에서 든지 가능
문자: 'HELLO', 'She''s' 숫자: 10L(Long), 10D(Double), 10F(Float) Boolean: TRUE, FALSE ENUMM: jpabook.MemberType.Admin (패키지명 포함) 엔티티 타입: TYPE(m) = Member(상속 관계에서 사용) - "select i from Item i where type(i) = Book" JPQL 기타 SQL과 문법이 같은 식 EXISTS, IN AND, OR, NOT =, >, >=,
나이가 평균보다 많은 회원 select m from Member m where m.age > (select avg(m2.age) from Member m2) 한 건이라도 주문한 고객 select m from Member mm where (select count(o) from Order o where m = o.member) > 0 일반적인 sql에서 지원하는 서브쿼리가 가능 서브 쿼리 지원 함수 - [NOT] EXISTS(subquery): 서브쿼리에 결과가 존재하면 참 {ALL | ANY | SOME} (subquery) ALL 모두 만족하면 참 ANY, SOME: 같은 의미, 조건을 하나라도 만족하면 참 - [NOT] IN (subquery): 서브쿼리에 결과 중 하나라도 같은 것이 있으면 참 서브 ..
내부 조인 - SELECT m FROM Member m [INNER] JOIN m.team t 외부 조인 - SELECT m FROM Member m LEFT[OUTER] JOIN m.team t 세타 조인 - select count(m) from Member m, Team t where m.username = t.name 연관관계가 없는 것 조인 - ON 절 on절을 활용한 조인(JPA 2.1 부터 지원) 1. 조인 대상 필터링 2. 연관관계 없는 엔티티 외부조인(하이버네이트 5.1 부터) 1. 조인 대상 필터링 예) 회원과 팀을 조인하면서, 팀 이름이 A인 팀만 조인 JPQL SELECT m, t FROM Member m LEFT JOIN m.team t on t.name = 'A' SQL로 보내지는..
JPA는 페이징을 다음 두 API로 추상화 setFirstResult(int startPosition): 조회 시작 위치(0부터 시작) setMaxResult(int maxResult): 조회할 데이터 수 em.createQuery("select m FROM Member m order by m.age desc", Member.class) .setFirstResult(1) .setMaxResults(10) .getResultList(); 페이징은 내가 선택한 방언을 기준으로 나간다(Oracle = rownum, mysql offset 등)
select 절에 조회할 대상을 지정하는 것 프로젝션 대상: 엔티티, 임베디드 타입, 스칼라 타입(숫자, 문자등 기본 데이터 타입) SELECT m FROM Member m -> 엔티티 프로젝션 SELECT m.team FROM Member m -> 엔티티 프로젝션 SLECT m.address FROM M m -> 임베디드 타입 프로젝션 SELECT m.username, m.age FROM Member m -> 스칼라 타입 프로젝션 DISTINCT로 중복 제거 엔티티 프로젝션 List result = em.createQuery("select m from Member m", Member.class) .getResultList(); 임베디드 타입 프로젝션 List result = em.createQuery(..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/4iwuR/btrQrFTnpg6/h0ucAuAzfCMnKpXuCtGv8K/img.png)
JPQL소개 JPQL은 객체지향 쿼리 언어이다. 따라서 테이블을 대상으로 쿼리하는 것이 아니라 엔티티 객체를 대상으로 쿼리한다. JPQL은 SQL을 추상화해서 특정데이터베이스 SQL에 의존하지 않는다 JPQL은 결국 SQL로 변환된다. JPQL 문법 select m from Member as m where m.age > 18 엔티티와 속성은 대소문자 구분O(Member, age) JPQL 키워드는 대소문자 구분X(SELECT, FROM, where) 엔티티 이름 사용, 테이블 이름이 아님(Member) 별칭은 필수(m) as는생략 가능 집합과 정렬 COUNT, SUM, AVG, MAX, MIN 전부 사용 가능 Group By, Having Order By TypeQuery, Query TypeQuery ..