본문 바로가기

Back-end/JPA 개념48

29. JPQL - 사용자 정의 함수 0. 개요 - SQL에서 함수를 사용하듯, JPQL에서도 다양한 함수를 사용할 수 있다. - JPA를 사용하기 때문에 DB에 종속되지 않고 JPQL에서 제공하는 다양한 함수를 사용할 수 있다. - 기본 함수만을 가지고 해결하지 못하는 경우, 특정 DB에서 제공하는 함수를 가져와 사용할 수 있다. - 이때 사용자 정의 함수를 사용한다. - 이번 포스팅에서는 JPQL이 제공하는 기본 함수와 사용자 정의 함수에 대해서 알아보자. 1. 기본 함수 - JPQL에서 제공하는 기본 함수는 다음과 같다. → CONCAT, SUBSTRING, TRIM, LOWER, UPPER → LENGTH, LOCATE, ABS, SQRT, MOD, SIZE, INDEX - JPQL에서 제공하는 기본 함수의 사용 방법에 대해서 간단히.. 2022. 5. 2.
28. JPQL - case 식 0. 개요 - 이번 포스팅에서는 JPQL에서 사용할 수 있는 case 식에 대해서 알아보자. 1. Case 식의 종류 a) 기본 CASE - 예시를 통해 기본 case 식의 형태를 알아보자. SELECT CASE WHEN p.age = 35 THEN '노장' ELSE '현역' END FROM Player p; - 기본 case 식은 비교 대상에 대해서 조건을 부여할 수 있다. - 자바에서 사용하는 switch case 문과 동일한 원리로 작동한다. b) 단순 CASE - 예시를 통해 단순 case 식의 형태를 알아보자. SELECT CASE l.name WHEN 'leagueA' THEN '1부리그' WHEN 'leagueB' THEN '2부리그' ELSE '3부리그' END FROM League l; .. 2022. 4. 28.
27. JPQL - 서브 쿼리 & 타입 표현 0. 개요 - 이번 포스팅에서는 JPQL에서 SubQuery와 타입 표현에 대해 알아보자. 1. 서브 쿼리(SubQuery) a) 개념 - 서브 쿼리란, 쿼리 내부에 또 다른 쿼리를 삽입하는 형태를 말한다. - 간단한 예시를 통해서 서브 쿼리의 형태를 살펴보자. SELECT p FROM Player p WHERE p.age > (SELECT AVG(p2.age) FROM Player p2); - 이처럼 SQL과 동일하게 JPQL에서도 서브 쿼리를 사용할 수 있다. - 중요한 점은 서브 쿼리와 서브 쿼리를 포함하고 있는 쿼리는 쿼리상에서 연관 관계가 전혀 없다는 것이다. - 즉, p와 p2는 함께 사용되지 않고 독립적인 쿼리로 사용된다. - 이렇게 쿼리를 짜는 것이 서브 쿼리의 효율을 가장 잘 뽑아낼 수 .. 2022. 4. 27.
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.