BackEnd/ORM(JPA)
조인
내부 조인: 교집합 - 공통된 요소가 없다면 row가 출력되지 않음 SELECT m FROM Member m [INNER] JOIN m.team t 외부 조인: 합집합 공통된 요소가 없어도 Member에 해당하는 row가 출력 SELECT m FROM Member m LEFT [OUTER] JOIN m.team t 세타 조인: 조건을 만족하는 cartesion product가 출력된다 (중복허용) Member의 모든 행과 Team의 모든 행이 조인 select count(m) from Member m, Team t where m.username = t.name 조인 - ON 절 ON절을 활용한 조인(JPA 2.1부터 지원) 1. 조인 대상 필터링 2. 연관관계 없는 엔티티 외부 조인(하이버네이트 5.1부..
페이징 API
페이징 API JPA는 페이징을 다음 두 API로 추상화 setFirstResult(int startPosition): 조회 시작 위치 setMaxResults(int maxResult): 조회할 데이터 수 페이징 API 예시 //페이징 쿼리 String jpql = "select m from Member m order by m.name desc; List resultList = em.createQuery(jpql, Member.class) .setFirstResult(10) .setMaxResults(20) .getResultList(); 페이징 API - MySQL 방언 SELECT M.ID AS ID, M.AGE AS AGE, M.TEAM_ID AS TEAM_ID, M.NAME AS NAME FRO..
프로젝션(SELECT)
프로젝션이란? SELECT 절에 조회할 대상을 지정하는 것 프로젝션 대상 : 엔티티, 임베디드 타입, 스칼라 타입(숫자, 문자등 기본 데이터 타입) SELECT m FROM Member m -> 엔티티 프로젝션 SELECT m.team FROM Member m -> 엔티티 프로젝션 SELECT m.address FROM Member m -> 임베디드 타입 프로젝션 SELECT m.username, m.age FROM Member m -> 스칼라 타입 프로젝션 DISTINCT로 중복 제거 엔티티 프로젝션으로 가져온 엔티티들은 영속성 컨텍스트에 관리되어 entity변경이 반영됨 ... Member member = new Member(); member.setUsername("member1"); member.s..
JPQL(Java Persistence Query Language)
JPQL - 기본 문법과 기능 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는 생략가능)
객체지향 쿼리 언어(JPQL)
JPQL은 양이 많아서 나눠 포스팅 합니다. 이 글에서는 JPQL 챕터까지 다룹니다. 이후 내용은 링크로 연동하여 포스팅하겠습니다. 목차 객체지향 쿼리 언어 소개 JPQL 기본 문법과 기능 페치(fetch) 조인 경로 표현식 다형성 쿼리 엔티티 직접 사용 Named 쿼리 벌크 연산 객체지향 쿼리 언어 소개 JPA는 다양한 쿼리 방법을 지원 JPQL JPA Criteria QueryDSL 네이티브 SQL JDBC API 직접 사용, Mybatis, SpringJdbcTemplate 함께 사용 JPQL 소개 가장 단순한 조회 방법 EntityManager.find() 객체 그래프 탐색(a.getB().getC()) 나이가 18살 이상인 회원을 모두 검색하고 싶다면? JPQL JPA를 사용하면 엔티티 객체를 ..
값 타입
기본값 타입 더보기 JPA의 데이터 타입 분류 JPA에서 데이터타입은 최상위 레벨에서 크게 두 분류로 나뉜다. 엔티티 타입 @Entity로 정의하는 객체 데이터가 변해도 식별자로 지속해서 추적 가능 예) 회원 엔티티의 키나 나이 값을 변경해도 식별자로 인식 가능 값 타입 int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 식별자가 없고 값만 있으므로 변경시 추적 불가 예) 숫자 100을 200으로 변경하면 완전히 다른 값으로 대체 값 타입 분류 기본값 타입 자바 기본 타입(int, double) 래퍼 클래스(Integer, Long) String 임베디드 타입(embedded type, 복합 값 타입) 컬렉션 값 타입(collection value type) 기본값 ..