개발중 (617) 썸네일형 리스트형 JPA - 프로젝션 프로젝션 ? SELECT 절에 조회할 대상을 지정하는 것을 프로젝션이라 하고 { SELECT {프로젝션 대상} FROM } 으로 대상을 선택한다. 🔴 프로젝션 대상 엔티티 엠비디드 타입 스칼라 숫자, 문자 등 기본 데이터 타입 🔴 엔티티 프로젝션 SELECT m FROM Member m SELECT m.team FROM Member m 둘 다 엔티티를 프로젝션 대상으로 사용한다. 쉽게 생각하면 원하는 객체를 바로바로 조회한다는 것이다. 컬럼을 하나하나 나열에서 조회해야 하는 SQL 과 차이가 있다. 참고로 이렇게 조회한 엔티티는 영속성 컨텍스트에서 관리 된다. 🔴 임베디드 타입 프로젝션 JPQL 에서 임베디드 타입은 엔티티와 거의 비슷하게 사용된다. 임베디드 타입은 조회의 시작점이 될 수 없다는 제약이 .. JPA - 결과 조회 getResultList/getSingleResult JPA - 결과 조회 아래 메소드를 호출해서 실제 쿼리를 실행해서 DB 를 조회한다. 🔵 query.getResultList() 결과를 예제로 반환한다. 만약 결과가 없으면 빈 컬렉션을 반환한다. 🔵 query.getSingleResult() 결과가 정확히 하나 일 경우에만 사용한다. 결과가 없으면 NoResultException 발생 결과가 1개보다 많으면 NoUniqueResultException 발생 JPA - 파라미터 바인딩 🟡 이름 기준 파라메터 이름 기준 파라메터는 파라메터를 이름으로 구분하는 방법이다. 이름 기준 파라메터 앞에는 : 를 붙힌다. String userNameParam = "Binsoo"; TypedQuery query; query = em.createQuery("SELECT m FROM Member m WHERE m.username = :username"), Member.class); query.setParameter( "username ", userNameParam ); ListresultList = query.getResultList(); 🟡 위치 기준 파라메터 위치 기준 파라메터를 사용하려면 ? 다음에 위치 값을 주면 된다. 위치 값은 1부터 시작 된다. String userNameParam = "B.. 🟡 Criteria이란 ? 🟣 Criteria이란 ? Criteria 는 JPQL 을 생성하는 빌더 클래스다. 'Criteria' 은 영어 단어로는 '기준' 이라는 뜻을 가지고 있다. 🟣 Criteria 의 장점 문자가 아닌 query,select(m).shere(...) 처럼 프로그래밍 코드로 JPQL 을 사용할 수 있다. 컴파일 시점에 오류를 발견할 수 있다. IDE 를 사용하면 코드 자동 완성을 지원한다. 동적 쿼리를 작성하기 편하다. 예를 들어 JPQL 에서 select m frim Membeee m 처럼 오타가 있다고 가정해보자. 그래도 컴파일은 성공하고 애플리케이션을 서버에 배포할 수 있다. 문제는 해당 쿼리가 실행되는 런타임 시점에 오류가 발생한다는 점이다. 이것이 문자기반 쿼리의 단점이다. 반면에 Criteria는 .. 🟡 QueryDSL이란 ? 🟡 QueryDSL이란 ? QueryDSL 은 Criteria 처럼 JPQL 빌더 역할을 한다. 🟢 QueryDSL 의 장점 코드 기반이면서 단순하고 사용하기가 쉽다. 그리고 작성한 코드도 JPQL 과 거의 비슷해서 한눈에 들어온다. QueryDSL 과 Criteria 를 비교하면 Criteria 는 너무 복잡하다. QueryDSL 은 JPA 표준은 아니고 오픈소스 프로젝트다. 이것은 JPA 뿐만 아니라 JDO, 몽고DB, Java Collection, Lucene, Hiberate Search 도 거의 같은 문법으로 지원한다. 현재 스프링 데이터 프로젝트가 지원할 정도로 많이 기대되는 프로젝트이다. 대부분 Criteria 보다 QueryDSL 을 더 선호한다. 🟢 QueryDSL 로 작성한 코드 // .. 🟡 JPQL 이란 ? 🟡 JPQL 이란 ? JPQL 은 엔티티 객체를 조회하는 객체지향 쿼리이다. 문법은 SQL 과 비슷하고 ANSI 표준 SQL 이 지원하는 기능을 유사하게 지원한다. JPQL 은 SQL 을 추상화 해서 특정 DB 에 의존하지 않는다. 그리고 DB 방언만 변경하면 JPQL을 수정하지 않아도 자연스럽게 데이터 베이스를 변경할 수 있다. 예를 들어 SQL 함수라도 DB 마다 사용문법이 다른 것이 있는데, JPQL 이 제공하는 표준화된 함수를 사용하면 선택한 방언에 따라 해당 DB 에 맞춘 적절한 SQL 함수가 실행된다. JPQL 은 SQL 보다 간결하다. 🟣 JPQL 특징 JPQL 은 객체지향 쿼리 언어이다. 따라서 테이블을 대상으로 쿼리 하는 것이 아니라 엔티티 객체를 대상으로 쿼리 한다. JPQL 은 SQL.. 객체 지향 쿼리 소개 🟢 객체 지향 쿼리 소개 EntityManager.find() 메소드를 사용하면 식별자로 엔티티 하나를 조회할 수 있다. 이렇게 조회한 엔티티에 객체 그래프 탐색을 사용하면 연관된 엔티티를 찾을 수 있다. 식별자로 조회 EntityManager 객체 그래프 탐색 a.getA() 이 기능만으로 애플리케이션을 개발하기 어렵다. 예를들어 나이가 30살 이상인 회원을 모두 검색하고 싶다면 좀 더 현실적이고 복잡한 검색 방법이 필요하다, 그렇다고 모든 회원 엔티티를 메모리에 올려두고 애플리케이션에서 30살 이상인 회원을 검색하는 것은 현실성이 없다. 결국 DB 에 있으므로 SQL 로 필요한 내용을 최대한 걸러서 조회해야 한다. 하지만 ORM 을 사용하면 DB 테이블이 아닌 엔티티 객체를 대상으로 개발하므로 검색도.. Java 객체/ 기본값 타입의 특징 Java 객체/ 기본값 타입의 특징 엔티티 타입( Entity Type ) 의 특징 식별자가 있다. @id 엔티티 타입은 식별자가 있고, 식별자로 구분 할 수 있다. 생명 주기가 있다. 생성하고, 영속화 하고, 소멸하는 생명 주기가 있다. em.persist( entity ) 로 영속화 한다. em.remove( entity ) 로 제거한다. 공유 할 수 있다. 참조 값을 공유할 수 있다. 이것을 공유 참조라고 한다. 예를 들어 회원 엔티티가 있다면 다른 엔티티에서 얼마든지 회원 엔티티를 참조할 수 있다. 값 타입 ( Value Type ) 의 특징 식별자가 없다. 생명 주기를 엔티티에 의존한다. 스스로 생명주기를 가지지 않고 엔티티에 의존한다. 의존하는 엔티티를 제거하면 같이 제거 된다. 공유하지 않는.. 이전 1 ··· 38 39 40 41 42 43 44 ··· 78 다음