Spring Boot

250221 Spring Boot 05 - JPA Query Method 활용, JPQL

suerte10 2025. 2. 21. 18:20

1. JPA Query Method 활용

1) 컬럼에 포함된 단어로 검색(단어의 대/소문자 구분 없이)

 

2) 컬럼에 포함된 단어로 검색(단어의 대/소문자 구분 없이, 정렬 순서는 이름 내림차순)

* SQL을 자동으로 작성해주고 실행해준다는 장점이 있지만, 메서드명이 너무 길어지고 가독성이 떨어진다는 단점도 있다.

 

3) 대소문자 구분없이 컬럼 2개 중 1개 이상에 키워드가 포함된 데이터 검색

 

4) 컬럼이 어떤 값을 초과하는 데이터 검색

 

5) 컬럼이 어떤 값 미만인 데이터 검색

 

6) 컬럼이 어떤 범위 안에 있는 데이터 검색

* min 보다 크거나 같고, max 보다 작거나 같은 값이 해당된다.

 

7) 컬럼이 특정 날짜 이전인 데이터 검색

 

8) 컬럼이 특정 날짜 이후인 데이터 검색

 

9) 컬럼이 날짜 범위 안에 있는 데이터 검색

 

10) 특정 컬럼으로 데이터 검색

* Employee 엔터티 필드에 있는 Department 엔터티의 Name 필드로 검색

* JpaRepository인터페이스의 제네릭 타입과 다른 엔터티를 findBy메서드명에 입력하면 자동으로 join을 해준다.

findByDepartmentName() 메서드가 있는 EmployeeRepository 인터페이스가 상속받는 JpaRepository 인터페이스의 제네릭 타입

 

findByDepartmentName() 메서드를 단위테스트하면 출력되는 SQL, departments 테이블을 left inner join 해준다.
(참고) Department 엔터티 클래스

 

11) 여러개의 엔터티를 사용하는 데이터 검색(1)

* Employee 엔터티 필드에 있는 Department 엔터티 필드에 있는 Location 엔터티의 City필드로 검색

 

12) 여러개의 엔터티를 사용하는 데이터 검색(2)

* Employee 엔터티 필드에 있는 Department 엔터티 필드에 있는 Location 엔터티 필드에 있는 Country 엔터티의 Id필드로 검색

 

 

 

2. JPQL(Java Persistence Query Language)

1) JPQL이란?

  - JPA에서 사용하는 "객체 지향(object-oriented)" 쿼리 문법.
  - 테이블 이름과 컬럼 이름을 사용해서 쿼리 문장을 작성하는 것이 아니라, 엔터티 클래스 이름과 엔터티 필드 이름을 사용해서 쿼리를 작성하는 문법.
  - alias(별명)을 반드시 사용해야 함.
  - 엔터티 이름, 필드 이름들은 대소문자를 구분.

** 주의: SQL과 비슷해보여도 다른 부분이 많이 있으므로 사용할 때 주의해야 함.

 

2) 예시

JPQL을 사용해 작성한 메서드

 

... 중략 ...

단위 테스트 메서드

 

단위 테스트 결과 콘솔에 출력되는 내용 중 일부

 

3) @Param 애너테이션 - 바인딩 파라미터를 생성할 수 있다.

* @Param 애너테이션을 사용해서 생성한 바인딩 바라미터는 ' :파라미터명 ' 형식으로 입력해주면 된다.

단위 테스트 메서드

 

단위 테스트 결과 콘솔에 출력되는 내용 중 일부

 

4) JPQL에서 Join을 사용하는 SQL 만들기 (1)

* Employee 엔터티에 있는 Department 엔터티의 name 필드를 조건으로 검색하는 메서드.

 

단위 테스트 메서드
테스트 결과 콘솔에 출력되는 내용 중 일부. JPQL 쿼리에는 조인이 없었지만 SQL에는 자동으로 조인이 들어가 있는 것을 볼 수 있다.

 

 

5) JPQL에서 Join을 사용하는 SQL 만들기 (2)

 

단위 테스트 메서드
테스트 결과 콘솔에 출력되는 내용 중 일부

 

 

6) JPQL에서 Join을 사용하는 SQL 만들기 (3)

 

단위 테스트 메서드
테스트 결과 콘솔에 출력되는 내용 중 일부

 

 

 

3. JPA와 JPQL을 사용한 간단한 웹페이지 만들기

1) src/main/java 하위에 service 패키지, web 패키지 생성

 

2) web 패키지 하위에 HomeController.java 파일 생성

 

3) templates 하위에 index.html 파일 생성 - 테스트용으로 <h1> 하나만 일단 입력

4) templates 하위에 layout 폴더 생성

5) layout 폴더 하위에 fragments.html 파일 생성

 

6) index.html 파일 수정

 

7) service 패키지 하위에 EmployeeService.java 파일 생성

 

8) web 패키지 하위에 EmployeeController.java 파일 생성

 

9) templates 하위에 emp 폴더 생성

10) emp 폴더 하위에 list.html 파일 생성

 

 

※ 과제 

1. 직원 목록, 직원 상세보기

2. 부서 목록, 부서 상세보기

 

---------------------------------------

JPA : 객체와 테이블을 매핑

엔터티와 테이블을 매핑

필드와 컬럼을 매핑