자바 ORM 표준 JPA 프로그래밍 - 기본편-9

존스노우·2022년 1월 9일
0

JPA

목록 보기
10/10

JPA는 다양한 쿼리 방법을 지원

  1. JPQL
  2. JPA Criteria
  3. QueryDSL
  4. 네이티브 SQL
  5. JDBC API 직접사용 , MyBatis , SpringJDBCTemplate 함께 사용

JPQL

가장 단순한 조회 방법

EntityManager.find()

객체 그래프 탐생 (a.getB().getC())

그러나? 나이가 18살 이상인 회원을 모두 검색하고 싶다면 ?

엔티티대상으로 검색하면 -> sql 로 변해서 디비로..

Criteria

위에 JPQL은 사실은 단순한 스트링이다.
동적 쿼리를 만들기 어려움.

여러가지 문제점이.. 띄어 쓰기도 해결 해야되고..


동적 쿼리 짜기 좋다.

알아보기가 어려워서.. 잘 안씀

QueryDSL

이 부분은 다른 강의쪽에서

JPQL(문법) 잘하면 쿼리 디에스엘은 자동으로 잘하게 됨.

네이티브 SQL

JDBC 직접 사용, SpringJdbcTemplate

JQPL 기본 문법 과 쿼리 API

JQPL 소개

JPQL 프로젝트 하나 더만들어서 셋팅

JPQL 문법

집합과 정렬

TypeQuery, Query

결과 조회 API

결과가 없을때 익셉션이 터지네..
그러나 getSingleResult -> null 이나 옵셔널 반환되도록 짜져있음

Spring Data JPA --> 결과가 없으면 옵셔널로 반환 (익셉션 안터트리게)

파라미터 바인딩 - 이름 기준 , 위치기준

위치 기반은 안쓰는게 좋다

프로젝션

SELECT 절에 조회할 대상을 지정하는 것

프로젝션 대상 : 엔티티 ,임베디드 타입 , 스칼라 타입 (숫자 ,문자등 기본데이터타입)

엔티티 프로젝션을 하면 영속성 컨텍스트에 관리가 된다.

임베디드타입


스칼라 타입 sql 이랑 비슷비슷

프로젝션 - 여러 값 조회

Query Type

- > 문자기 때문에 다적어줘야됨..

페이징 API

JPA는 페이징을 다음 두 API로 추상화

setFirstResult(int startPosition) / setMaxResults 조회 시작 위치와 조회할 데이터수

H2 다이렉트는 limt ? offset ? 이 표준 페이징

조인

엔티티 중심을 객체스타일로 작성 된다.

세타조인 연관관계가 없는 막조인..?

left 도 적용가능 (Outer) 생략가능

서브쿼리

예제가 많은대.. 다 sql 문지랑 비슷하다..

JPA 서브 쿼리 한계

sql 이랑 같다..

From절 서브 쿼리를 쓰고 싶다면 ..?

native sql 써야됨 / 아니면 분해해서 날리거나..

JPQL 타입표현

이런식으로 타입 으로 조회 가능

조건식 CASE 식

기본 Sql 문법이라 딱히 보고만 가도 나쁘진않을거 같다.

이런식으로 만든다.

JPQL 기본 함수

여기서 안돼면.. 사용자 정의 함수를 써야된다.

그냥 쓸수 있는건 아니고 데이터베이스 방언에 추가 해야 된다.. 어떻게하지..

DB종속적이지만 함수가 다 등록되있다.

컬렉션의 값

현재는 팀이 들어간게 없어서 0?

사용자 정의함수

이런식도 가능

외우진 못하고 소스코드를 열어봐서..

profile
어제의 나보다 한걸음 더

0개의 댓글