본문 바로가기

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


JPA

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<Member> query1 = em.createQuery("select m from Member m ", Member.class);

- 리턴받는 타입이 명확하다 .   두번째 파라미터는 리턴 받을 타입 정보를 적으면된다  

 

Query 타입은 반환 타입이 명확하지 않을 때 사용한다. 

 

Query query1 = em.createQuery("select m.name, m.age from Member m ");

- 리턴 타입 정보가 명확하지 않다 .  

 

 

결과 조회 API 

 

query.getResultList(): 결과가 하나 이상일 떄 , 리스트 반환  결과가 없으면 빈 리스트 반환

 

query.getSingleResult() :  결과가 정확히 하나여야한다. 단일 객체 반환

 

 - 결과가 없으면  javax.persitence.NoResultException

 - 결과가 여러개면 javax.persitence.NonUniquerResultExcetion  

 

이 발생 한다.

 

파라미터 바인딩 

 

 

 

Member member = new Member("user1" , 20);
em.persist(member);
																			//?1 (숫자기준표기)
Member username = em.createQuery("select m from Member m where m.username = :username ", Member.class)
          .setParameter("username", member.getUsername()) //파라미터 바인딩 이름기준
          //setParameter(1,usernameParam)// 숫자기준
          .getSingleResult();

System.out.println("username = " + username.getUsername());

 

숫자기준과 이름기준 두가지 방식이 있는데 숫자기준은 중간에 추가 되거나 하면 숫자가 밀릴 수도 있고 불편하기 때문에  이름기준으로 하는 것이 좋다   .

 

 

반응형