본문 바로가기

개인적으로 공부한 것을 정리해 놓은 블로그입니다 틀린 것이 있으면 댓글 부탁 드립니다!


반응형

JPA

(55)
JPA 공부 19 - JPQL . 8 Named 쿼리 ?named 쿼리 - 미리 정의해서 이름을 부여해두고 사용하는 JPQL 이다 - 정적 쿼리만 가능하다 . - 어노테이션 xml 정의가 가능하다 -애플리케이션 로딩 시점에 초기화 후 재사용한다. 로딩 시점에 sql 로 만들어 놓고 캐싱한다. -애플리케이션 로딩 시점에 쿼리를 검증할 수 있다. @Entity @Getter @Setter @NoArgsConstructor @AllArgsConstructor @NamedQuery( name = "Member.findByUsername", query = "select m from Member m where m.username = :username" ) public class Member { @Id @GeneratedValue private Long id; priv..
JPA 공부 18 - JPQL . 7 페치조인 fetch 조인? SQL의 조인 종류가 아니고 JPQL에서 성능 최적화를 위해 제공하는 기능이다 , 연관된 엔티티나 컬렉션을 SQL 한 번에 함께 조회하는 기능이다 join fetch 명령어를 통해 사용한다 . 1. 엔티티 fetch join 회원을 조회하면서 연관된 팀도 함께 조회 하고싶은 경우를 예로들면 1. // 만약 연관관계에 있는 Team이 모두 다르다면 쿼리가 n+1번으로 나간다. String query = "select m from Member m "; List result = em.createQuery(query, Member.class) .getResultList(); for (Member member : result) { System.out.println("member=" +member..
JPA 공부 17 - JPQL . 6 경로 표현식 JPQL 에서 객체의 원하는 필드를 .을 찍어 경로를 탐색한다. 상태필드 , 단일값 연관필드, 컬렉션 값 연관 필드 3가지 방식이있다 . 상태필드는 단순히 값을 저장하기위한 필드이다 . m.username, m.age 값 타입에 대한 필드들을 말한다 . 단일값 연관필드는 @ManyToOne @OneToMany 등의 연관관계에서 대상이 단일 엔티티 일 경우를 말한다 ( ex) m.team ) 컬렉션 값 연관 필드는 @OneToMany , @ManyToMany 처럼 연관관계 대상이 엔티티 컬렉션일 경우를 말한다 (ex ) m.orders ) 경로 표현식 특징 -상태필드 : 경로 탐색의 끝, 탐색 -단일 값 연관 경로 : 묵시적 내부조인 발생 탐색 -컬랙션 값 연관 경로 :묵시적 내부조인 발생 , From 절..
JPA 공부 16 - JPQL . 4 JOIN Team team = new Team("team1"); em.persist(team); //샘플 데이터 Member member = new Member("user",10); member.setTeam(team); em.persist(member); em.flush(); em.clear(); // inner join (inner 생략가능) String query = "select m from Member m inner join m.team t"; List result = em.createQuery(query, Member.class) .getResultList(); // left outer join (outer 생략가능) String query2 = "select m from Member m left ou..
JPA 공부 15 - JPQL . 3 페이징 JPA 에서는 페이징에 필요한 기능들을 추상화 해놨기 때문에 편하게 페이징 처리가 가능하다 , Spring Data JPA 에서는 Page 라는 클래스를 지원하는데 페이징에 대한 기능들을 한번터 추상화해 더욱 사용하기 편리하다 . //샘플 데이터 for (int i = 0 ; i
JPA 공부 14 - JPQL . 2 프로젝션 프로젝션 - select 절에 조회할 대상을 지정하는 것 - 프로젝션대상 : 엔티티 , 임베디드 타입 ,스칼라 타입(숫자 , 문자등 기본 데이터 타입) 엔티티 select m from Member m select m.team from Member m 임베디드 타입 select m.address from Memberm 스칼라 타입 select m.username, m.age from Member m 반환타입이 엔티티 컬랙션 타입인경우 컬렉션안에 엔티티들이 모두 영속성 컨택스트 안에서 관리된다 . Member member = new Member("user1" , 20); em.persist(member); em.flush(); em.clear(); List result = em.createQuery("sel..
JPA 공부 14 - JPQL . 1 JPQL 문법 - select m from Member as m where m.age > 18 - 클래스명은 자바문법대로 대문자로 해야한다. 필드명은 소문자로 사용한다. - JPQL 키워드는 대소문자 구문 하지 않는다. - 엔티티의 이름을 사용한다 . 테이블 이름이 아니다 . - 별칭은 필수다 (as 생략가능 ) - Ansi sql의 표준 집합과 정렬 함수들을 제공한다 . (COUNT() , SUM() , AVG() , MAX() , MIN) TypedQuery와 Query TypedQuery 타입은 반환 타입이 명확할 때 사용한다. TypedQuery query1 = em.createQuery("select m from Member m ", Member.class); - 리턴받는 타입이 명확하다 . 두..
JPA 공부 13 - 직접 쿼리를 작성하는 방법 JPA를 사용하면 엔티티 객체를 중심으로 개발하게 되는데 문제는 검색 쿼리이다 검색을 할 때도 테이블이 아닌 엔티티 객체를 대상으로 검색을 해야한다. 모든 DB 데이터를 객체로 변환해서 검색하는 것은 불가능하기 떄문에 애플리케이션이 필요한 데이터만 DB에서 불러오려면 결국 검색 조건이 포함된 SQL이 필요하다 . 1.JPQL 이런 문제를 해결하기 위해 SQL 을 추상화한 JPQL이라는 객체 지향 쿼리 언어를 제공한다 SQL 문법의 문법을 지원한다. JPQL은 데이터베이스 테이블을 대상으로 쿼리를 날리는 SQL 과는 달리 엔티티 객체를 대상으로 쿼리를 날리는 것이다. JPQL로 짜면 그게 SQL로 번역되서 쿼리가 날라간다. EntityManager에 createQuery( JPQL쿼리 , 검색하는 엔티티 ..

반응형