λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

TIL/Spring

πŸ“š 3/12(ν™”) 내일배움캠프 Java-Spring 53일차 TIL - SpringData JPA Projection

πŸ“  μ˜€λŠ˜μ˜ ν•™μŠ΅ ν‚€μ›Œλ“œ 

  • SpringData JPA - Projection

 

 

 

 

πŸ“ Projectionμ΄λž€

  Spring Data JPA ν”„λ‘œμ μ…˜ λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ ν•„μš”ν•œ ν•„λ“œλ§Œμ„ μ„ νƒμ μœΌλ‘œ μ‘°νšŒν•˜μ—¬ 쿼리 μ„±λŠ₯을 μ΅œμ ν™”ν•˜κ³ , ν•„μš”ν•œ λ°μ΄ν„°λ§Œμ„ λ°˜ν™˜ν•¨μœΌλ‘œμ¨ λΆˆν•„μš”ν•œ μžμ› λ‚­λΉ„λ₯Ό λ°©μ§€ν•  수 μžˆλ‹€. μ—”ν‹°ν‹°μ˜ 일뢀 μ†μ„±λ§Œμ„ μ„ νƒμ μœΌλ‘œ μ‘°νšŒν•  수 있으며, μ΄λŠ” μ—”ν‹°ν‹°μ˜ νŠΉμ • ν•„λ“œλ‚˜ μ—°μ‚° κ²°κ³Όλ₯Ό 직접 μ‘°νšŒν•˜μ—¬ μ‚¬μš©ν•˜λŠ” λ“±μ˜ μƒν™©μ—μ„œ μœ μš©ν•˜κ²Œ 쓰인닀. ν”„λ‘œμ μ…˜μ€ λ‹€μ–‘ν•œ λ°©λ²•μœΌλ‘œ κ΅¬ν˜„ν•  수 μžˆλ‹€.

1. μΈν„°νŽ˜μ΄μŠ€ 기반 ν”„λ‘œμ μ…˜
 : μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ •μ˜ν•˜κ³  ν•΄λ‹Ή μΈν„°νŽ˜μ΄μŠ€μ˜ λ©”μ„œλ“œμ— μ‘°νšŒν•  ν•„λ“œλ₯Ό μ„ μ–Έν•˜μ—¬ μ‚¬μš©ν•œλ‹€.
public interface UserNameProjection {
    String getUsername();
}

List<UserNameProjection> findByAge(int age);

 

 

 

 

 

2. 클래슀 기반 ν”„λ‘œμ μ…˜
: 클래슀λ₯Ό μ •μ˜ν•˜κ³  ν•΄λ‹Ή 클래슀의 μƒμ„±μžμ— μ‘°νšŒν•  ν•„λ“œλ₯Ό λ§€ν•‘ν•˜μ—¬ μ‚¬μš©ν•œλ‹€.
public class UserNameProjection {
    private String username;

    public UserNameProjection(String username) {
        this.username = username;
    }

    // Getter λ“± ν•„μš”ν•œ λ©”μ†Œλ“œ κ΅¬ν˜„
}

List<UserNameProjection> findByAge(int age);

 

 

 

 

 

3. 동적 ν”„λ‘œμ μ…˜
: λ°˜ν™˜ νƒ€μž…μ— 'Object'λ₯Ό μ‚¬μš©ν•˜κ³  μ‹€μ œ 쿼리 μ‹€ν–‰ 후에 ν•„μš”ν•œ ν˜•νƒœλ‘œ 데이터λ₯Ό κ°€κ³΅ν•œλ‹€.
List<Object> findByAge(int age);

 

 

 

 

 

4. DTO 기반 ν”„λ‘œμ μ…˜
: DTO 클래슀λ₯Ό μ •μ˜ν•˜κ³  ν•΄λ‹Ή 클래슀의 μƒμ„±μžμ— μ‘°νšŒν•  ν•„λ“œλ₯Ό λ§€ν•‘ν•˜μ—¬ μ‚¬μš©ν•œλ‹€.
public class UserDto {
    private String username;

    public UserDto(String username) {
        this.username = username;
    }

    // Getter λ“± ν•„μš”ν•œ λ©”μ†Œλ“œ κ΅¬ν˜„
}

List<UserDto> findByAge(int age);