본문 바로가기

Back-end109

26. JPQL - 조인 0. 개요 - JPQL에서 Join을 사용하는 방법에 대해서 알아보자. 1. Join의 종류 a) 내부 조인(inner join) - 내부 조인은 INNER JOIN 키워드를 사용한다. - 내부 조인은 JOIN의 기본 설정(= default)이다. - 그러므로 그냥 JOIN 키워드만 사용하더라도 내부 조인을 수행한다. - 내부 조인은 두 테이블을 조인할 때, 매칭되는 데이터가 존재하는 데이터만을 출력한다. - 예를 들어, 테이블 A에는 A, B, C가 있고 테이블 B에는 A, B만 존재한다고 가정해보자. - 내부 조인을 사용하는 경우, 조인 결과가 A, B만 출력된다. - 즉, C와는 매칭되는 데이터가 없으므로 C는 출력되지 않는다. - 다음 예시 코드를 보자. SELECT p FROM Player p .. 2022. 4. 26.
25. JPQL - 페이징 0. 개요 - JPQL에서 페이징을 사용하는 방법에 대해서 알아보자. 1. 개념 a) 페이징 이란 - 페이징이란 조회된 결과를 가져올 때, 몇 번째 데이터부터 몇 개를 가져올지 설정하는 것이다. - Oracle이나 MySQL을 사용하는 경우, 페이징을 설정하기 위한 쿼리가 굉장히 복잡하다. - 하지만, JPQL은 이를 2가지 메서드로 추상화하여 매우 편리하게 사용할 수 있다. 2. 페이징 API - JPA는 복잡한 페이징 쿼리를 다음 2가지 메서드(= API)로 추상화하여 제공한다. - 이 2가지 메서드는 설정한 방언에 따라 페이징 쿼리로 변환된다. a) setFirstResult(int startPosition) - setFirstResult() 메서드는 조회된 결과를 가져올 때의 시작 위치를 설정한다.. 2022. 4. 25.
24. JPQL - 프로젝션(Projection, Select) 0. 개요 - 이번 포스팅에서는 JPQL을 이용하여 Select 절을 작성하는 방법에 대해서 알아보자. 1. 프로젝션(= projection) - 프로젝션이란 JPQL의 Select 절을 이용하여 어떤 데이터를 조회할 것인가를 말한다. - Select를 절의 조회 대상을 무엇으로 작성하냐에 따라 프로젝션의 종류가 달라진다. - 프로젝션은 조회하는 데이터의 속성에 따라서 다음 3가지 종류로 구분된다. → Entity(객체) 프로젝션 → Embedded 프로젝션 → 스칼라 프로젝션 2. Entity 프로젝션 a) Entity 프로젝션이란? - 객체 또는 객체의 속성을 조회하는 Select문을 말한다. b) 기본 사용방법 - 다음 예시를 보면서 이해해보자. - 첫 번째 예시는 객체를 조회하는 프로젝션이다. -.. 2022. 4. 22.
23. JPQL - 기본 기능(파라미터 바인딩, 결과 조회, 쿼리의 종류) 0. 개요 - 이전 포스팅에서 JPQL에 대해서 전반적으로 알아보았다. - 이번 포스팅에서는 JPQL의 기본 문법과 기능에 대해서 알아보자. 1. 기본 규칙 - JPQL은 다음과 같은 기본 규칙을 준수해야 한다. 1. JPQL은 DB 테이블이 아닌 객체(= Entity)를 대상으로 작성한다. 2. Entity를 사용할 때에는 테이블 명칭이 아닌 Entity 이름을 사용한다. 3. Entity 속성을 작성할 때, 대소문자를 구분하므로 주의해야 한다. 4. JPQL 키워드(= select, from, where 등)는 대소문자를 구분하지 않는다. 5. 별칭은 필수로 사용하며, as는 생략 가능하다. 2. 집합과 정렬 - JPQL은 ANSI 표준에 의해 정의된 SQL 문법을 모두 지원한다. - 집합과 정렬에는.. 2022. 4. 21.
22. JPQL - JPQL에 대하여 0. 개요 - 이전 포스팅까지 기본적인 JPA의 개념과 기능에 대해서 알아보았다. - JPA는 객체 간의 관계를 RDB 형태로 변환 및 매핑을 돕는 기술이다. - 그러므로 JPA는 객체 중심적으로 작성된 코드를 RDB에 적용할 수 있도록 해당 코드를 쿼리문으로 변환하는 역할을 한다. - 전반적인 과정을 보면 근본적인 개념은 달라지지 않았다. - 개발자가 쿼리문을 직접 작성하지 않고 이를 객체 지향적 코드로 작성할 뿐, 내부적으로는 쿼리문이 발생하기 때문이다. - 즉, 객체 중심적 코드를 이용하여 자유자재로 쿼리를 구현할 수 있어야 한다. - 지금까지 객체 간의 관계를 RDB의 형태로 전환하는 방법을 배웠다. - 그러나 실무에서는 훨씬 복잡한 관계를 구현하는 경우가 대부분이다. - 복잡한 관계를 JPA에서.. 2022. 4. 20.
21. 값 타입(4) - 값 타입과 컬렉션 0. 개요 - 이번 포스팅에서는 값 타입을 사용한 collection에 대해서 알아보려 한다. - 결론부터 말하면 값 타입 collection은 사용하지 않는다. - 값 타입 collection이 무엇인지, 왜 사용하지 않는지에 대해서 알아보자. 1. 값 타입과 collection 사용법 - 이전 포스팅에서 일대다(1:N) 관계를 표현할 때, Entity를 collection에 담아서 사용해본 적이 있다. - 값 타입 또한 collection에 담아서 사용할 수 있는데, 그 방법에 대해서 알아보자. a) 예시 케이스 - 예를 들어, 위의 사진과 같은 축구 선수 Entity를 구성하려고 한다. → Player는 Entity이다. → Game은 출전한 경기를 기록하는 값 타입이다. → preferPos는 선.. 2022. 4. 19.
20. 값 타입(3) - 객체 비교와 equals() 재정의 0. 개요 - 이번 포스팅에서는 값 타입 객체를 이용한 비교에 대해서 알아보자. 1. 값 비교 a) 일반적인 값 비교 - 일반적으로 Java에서는 값을 비교할 때 비교 연산자(==)와 equals를 사용한다. → 동일성(identity) 비교: 비교 연산자(==)를 사용하여 참조 값을 비교한다. 즉, 메모리 주소 값을 비교한다. → 동등성(equivalance) 비교: equals() 메서드를 사용하여 객체의 내용을 비교한다. 즉, 객체의 값(= value)을 비교한다. - 다음 예시를 살펴보자. public class JpaMain { public static void main(String[] args) { Integer a = new Integer(10); Integer b = new Integer(.. 2022. 4. 18.
19. 값 타입(2) - 문제점과 불변 객체 0. 개요 * 본 포스팅은 이전 포스팅과 이어지는 내용임을 알립니다. - 이전 포스팅에서 값 타입에 대해서 알아보았다. - 이번 포스팅에서는 값 타입을 사용할 때 발생하는 문제점과 이를 해결하기 위해 사용하는 불변 객체에 대해서 알아보자. 1. 값 타입을 사용하는 이유 - 이전 포스팅에서 값 타입에 대해서 배웠다. - 굳이 값 타입을 사용하는 이유가 무엇일까 생각해볼 필요가 있다. - 왜냐면 JPA를 사용하므로, 이미 객체지향적 프로그래밍을 달성했다고 볼 수 있기 때문이다. a) 굳이 값 타입을 사용하는 이유 - 값 타입을 사용하는 이유는 객체의 내용을 조금이라도 더욱 간소화하기 위함이다. - 그러므로 값 타입 또한 단순하고 간단한 구조를 이뤄야 한다. - 더불어, 값 타입을 사용함에 있어서 그 안정성이.. 2022. 4. 15.
18. 값 타입(1) - 개념 0. 개요 - 이번 포스팅에서는 JPA의 데이터 타입에 대해서 알아보자. 1. 값 타입 - JPA는 두 가지 데이터 타입을 사용한다. a) Entity 타입 - JPA의 최상위 타입이다. - @Entity로 정의된 클래스 객체를 의미한다. - Entity 타입은 값이 변경되어도 식별자(= id, PK)를 이용하여 추적이 가능하다. ex) 게시판의 1번 글(= 객체)의 내용이 수정 또는 삭제되어도 1번 아이디를 이용하여 객체의 상태를 추적할 수 있다. b) 값 타입 - int, String, Integer와 같이 자바의 Primitive 또는 Wrapper 클래스를 이용하여 생성된 객체 - 식별자가 없으므로 값의 변경 시 추적이 불가능하다. ex) int a = 100이라면, 이를 a = 200으로 변경해.. 2022. 4. 14.