본문 바로가기

개발중/Java Persistence API (JPA)

(27)
[Spring] JPA Specification 를 이용해 검색 API 개발하기 ✍ 일단, 저는 JPA 에 대해 매우 큰 관심이 있습니다. 하지만 우리 회사에서는 사용하지 않기에, JPA 에 대해 공부를 해보려고 합니다 ! Spring Jpa Progect Ex ✍ GitHub - soobinJung/Jpa_Defalut: Spring Jpa Specification Test Spring Jpa Specification Test. Contribute to soobinJung/Jpa_Defalut development by creating an account on GitHub. github.com 아래와 같은 결과 값을 반환하는 간단한 API 를 구상해보았습니다. 더보기 http://localhost:8080/api/user [ { "id": 1, "userName": null, "pas..
[JPA] JPA 의 장점이 뭔지 물어봤을 때 잘 대답하지 못했다. . . JPA(Java Persistence API)는 자바 ORM 기술에 대한 API 표준이다. ORM이란 Object Realational Mapping의 약자로 객체와 관계형 데이터베이스를 매핑해주는 것을 말한다. 그렇다면 ORM기술은 왜 나왔을까? JPA를 공부하기 전에 관계형 데이터베이스의 문제점을 먼저 알아보자. 상품 데이터를 관리하는 Item 클래스가 있고, 상품 데이터를 관계형 데이터베이스에서 관리하기 위해서 우리는 SQL문을 사용한다. SQL 중심 개발의 문제점은 개발자가 CRUD라고 불리는 INSERT, UPDATE, SELECT, DELETE 문을 작성해서 객체를 관계형 데이터베이스에 넣어주고 가져오는 작업을 하는 것이다. 즉, 자바 객체를 SQL을 통해 데이터베이스에 관리하게 하고 데이터베..
[ JPA ] Save 후 Id 구하기 삽입을 목적으로 vo를 save 를 이용하여 삽입했을 때 생성된 id 를 구하는 법은 아주 간단하다. repository.save( vo ).getId(); save 를 진행한 repository 가 반환 하는 것은 방금 내가 저장한 vo 에 대한 저장된 결과 이기 때문이다.
[JPA] 연관 관계 정리 JPA 를 하면서 테이블간 연관관계 맺기 JPA 에서는 연관 관계를 잘못 맺으면 무한 루프가 .. 발생한다. 고생 좀 했어서 정성스럽게 기록해야지 연관관계 이해하는 예시 "자동차 - 바퀴" 연관관계의 주인은 바퀴가 가지고 자동차는 연관관게를 당하는 입장이다. 아래 두개의 Table 간의 Column 의 연관관계를 맺어보자. TABLE : MEMBER COLUMN : M_ID TABLE : TEAM COLUMN : T_ID TEAM 더보기 ✔ Team - Team 은 여러명의 Member를 가질 수 있다. ㄴ 즉, Team 은 연관관계의 주인이 될 수 없다. 위의 예시에서 자동차 같은 역할을 한다. - Member List 를 담는 변수를 보면 Members 인데 Member 의 Setter 를 보면 se..
JPQL JOIN JPQL JOIN JPQL도 조인을 지원한다. SQL 과 조인 기능은 같고 문법만 약간 다르다. 🟣 내부 조인 내부 조인은 INNER JOIN 을 사용한다. 참고로 INNER 를 생략할 수 있다. String teamName = "TEAM1" String query = "SELECT m FROM Member m INNER JOIN m.team t WHERE t.name = :teamName" List members; members = em.createQuery( query, Member.class ).setParameter("teamName", teamName).getResultList(); 회원과 팀을 내부 조인해서 'TEAM1' 에 소속된 회원을 조회하는 다음 JPQL 을 보자. SELECT m FR..
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..