Home
>
Spring
>
π[Spring] Spring Data JPAλ₯Ό μ΄μ©ν΄ λ€μν 쿼리λ₯Ό μμ±ν΄λ³΄μ.
Spring
Framework
π[Spring] Spring Data JPAλ₯Ό μ΄μ©ν΄ λ€μν 쿼리λ₯Ό μμ±ν΄λ³΄μ.
1οΈβ£ findByName
μμ κΈ°λ₯μ Spring Data JPA λ‘ λ§λ€μ΄ λ³΄κΈ°λ‘ νλ€!
public class UserService {
private final UserRepository userRepository ;
public UserService ( UserRepository userRepository ) {
this . userRepository = userRepository ;
}
// μμ κΈ°λ₯.
public void deleteUser ( String name ) {
// SELECT * FROM user WHRER name = ?
userRepository . findByName ( name ) // <- μ΄ μ½λλ λΉ¨κ° κΈμ¨λ‘ νμλ¨.
}
}
findByName()
μ΄ λΉ¨κ° κΈμ¨λ‘ νμλλ μ΄μ λ λ©μλκ° μ μλμ§ μμκΈ° λλ¬Έμ
λλ€.
κ·Έλ λ€λ©΄ μ΄λ»κ² ν΄μΌν κΉμ?
UserRepository
μΈν°νμ΄μ€ λ΄λΆμ βν¨μβλ₯Ό μ μν΄ μ£Όλ©΄ λ©λλ€.
public interface UserRepository extends JpaRepository < User , Long > {
User findByName ( String name );
}
User findByName(String name);
findByName
ν¨μλ User
λ₯Ό λ°ννλ©°, name
μ parameter(λ§€κ°λ³μ)λ‘ λ°μ΅λλ€.
μ΄λ κ² μ μνκ³ λμ λ€μ UserService
μμ μ¬μ©ν΄μ£Όλ©΄ λ©λλ€.
public class UserService {
private final UserRepository userRepository ;
public UserService ( UserRepository userRepository ) {
this . userRepository = userRepository ;
}
// μμ κΈ°λ₯.
public void deleteUser ( String name ) {
// SELECT * FROM user WHRER name = ?
User user = userRepository . findByName ( name );
if ( user == null ) {
throw new IllegalArgumentException ();
}
userRepository . delete ( user );
}
}
findByName(String name)
μ User
λ₯Ό λ°νν©λλ€.
findByName
ν¨μμμ User
κ° μλ€λ©΄ User
λ₯Ό λ°ννκ³ μλ€λ©΄ Null
μ λ°νν©λλ€.
μλλΌλ©΄ jdbcRepositoryλ₯Ό μ¬μ©νλλΌλ©΄ DELETE FROM user WHERE name = ?
; μ΄ μΏΌλ¦¬λ₯Ό μ§μ λ λ €μ€¬μ΄μΌ ν©λλ€.
νμ§λ§ Spring Data JPA μμλ κ·Έλ΄ νμ μμ΄ delete()
λ₯Ό μ¬μ©ν μ μμ΅λλ€.
2οΈβ£ Spring Data JPAμμ λ©μλ μ΄λ¦μ ν΅ν΄ 쿼리λ₯Ό μλμΌλ‘ μμ±νκΈ°.
Spring Data JPA μμλ μ΄λ¦μ ν΅ν΄ 쿼리λ₯Ό μλμΌλ‘ μμ±ν μ μμ΅λλ€.
μ΄ κΈ°λ₯μ νμ©νκΈ° μν΄μλ λ©μλ μ΄λ¦μ νΉμ ν κ·μΉμ λ°λΌ μμ±ν΄μΌ ν©λλ€.
Spring Data JPAλ λ©μλ μ΄λ¦μ νμ±νμ¬ μΏΌλ¦¬λ‘ λ³ννλ―λ‘, μ¬λ°λ₯Έ κ·μΉμ λ°λ₯΄λ κ²μ΄ μ€μν©λλ€.
1οΈβ£ Spring Data JPAμμ λ©μλ μ΄λ¦μ μμ±ν λμ μ£Όμ κ·μΉ.
1οΈβ£ λ©μλ μ΄λ¦μ κΈ°λ³Έ ꡬ쑰.
λ©μλ μ΄λ¦μ λ³΄ν΅ findBy, readBy, queryBy, countBy λ±μ μ λμ¬ λ‘ μμν©λλ€.
κ·Έ λ€μ 쑰건μΌλ‘ μ¬μ©ν νλ μ΄λ¦μ CamelCase λ°©μμΌλ‘ μΆκ°ν©λλ€.
π κΈ°λ³Έ ꡬ쑰.
[μ λμ¬][μν°ν°μ νλ μ΄λ¦][쑰건μ]
π μμ.
List < User > findByEmail ( String email );
List < User > findByNameAndAge ( String name , int age );
2οΈβ£ μ λμ¬.
λ©μλ μ΄λ¦μ λ³΄ν΅ λ€μκ³Ό κ°μ μ λμ¬λ‘ μμν©λλ€.
findBy : νΉμ 쑰건μ λ§λ μν°ν°λ₯Ό μ‘°νν©λλ€.
readBy : findByμ λΉμ·ν μν λ‘ λ°μ΄ν°λ₯Ό μ‘°νν λ μ¬μ©ν©λλ€.
queryBy : λ°μ΄ν° μ‘°ν μ μ¬μ©.
countBy : νΉμ 쑰건μ λ§λ μν°ν° κ°μλ₯Ό μ‘°νν©λλ€.
existsBy : νΉμ 쑰건μ λ§λ μν°ν°κ° μ‘΄μ¬νλμ§ μ¬λΆλ₯Ό νμΈν©λλ€.
deleteBy : νΉμ 쑰건μ λ§λ μν°ν°λ₯Ό μμ ν©λλ€.
3οΈβ£ 쑰건 μ°κ²° ν€μλ.
μ¬λ¬ νλλ₯Ό 쑰건μΌλ‘ μ¬μ©ν λλ λ€μκ³Ό κ°μ ν€μλλ₯Ό μ¬μ©νμ¬ μ‘°κ±΄μ μ°κ²°ν©λλ€.
And : λ 쑰건μ λͺ¨λ λ§μ‘±νλ κ²½μ°λ₯Ό μ‘°νν©λλ€.
Or : λ 쑰건 μ€ νλλΌλ λ§μ‘±νλ κ²½μ°λ₯Ό μ‘°νν©λλ€.
π μμ
List < User > findByNameAndAge ( String name , int age );
List < User > findByNameOrEmail ( String name , String email );
4οΈβ£ μ°μ°μ ν€μλ.
Spring Data JPAλ λ€μν μ°μ°μ§ ν€μλλ₯Ό μ§μνμ¬ νλ κ°μ 쑰건μ λΆμ¬ν μ μμ΅λλ€.
Comparison(λΉκ΅)
IsNull, IsNotNull : κ°μ΄ nullμΈμ§ μλμ§λ₯Ό 체ν¬ν©λλ€.
IsTrue, IsFalse : Boolean κ°μ΄ true λλ falseμΈμ§ 체ν¬ν©λλ€.
LessThan, LessThanEqual : κ°μ΄ μ§μ λ κ°λ³΄λ€ μκ±°λ, μκ±°λ κ°μ κ²½μ°λ₯Ό μ‘°νν©λλ€.
GreaterThan, GreaterThanEqual : κ°μ΄ μ§μ λ κ°λ³΄λ€ ν¬κ±°λ, ν¬κ±°λ κ°μ κ²½μ°λ₯Ό μ‘°νν©λλ€.
Between : λ κ° μ¬μ΄μ μλ κ²½μ°λ₯Ό μ‘°νν©λλ€.
String Operations(λ¬Έμμ΄ μ°μ°)
Like : SQLμ LIKEμ κ°μ΄ νΉμ λ¬Έμμ΄ ν¨ν΄μ΄ ν¬ν¨λ κ²½μ°λ₯Ό μ‘°νν©λλ€.
StartingWith : νΉμ λ¬Έμμ΄λ‘ μμνλ κ²½μ°λ₯Ό μ‘°νν©λλ€.
EndingWith : νΉμ λ¬Έμμ΄λ‘ λλλ κ²½μ°λ₯Ό μ‘°νν©λλ€.
Containing : νΉμ λ¬Έμμ΄μ ν¬ν¨νλ κ²½μ°λ₯Ό μ‘°νν©λλ€.
Collection Operations(컬λ μ
μ°μ°)
In : μ£Όμ΄μ§ 컬λ μ
μ κ°μ΄ ν¬ν¨λλ κ²½μ°λ₯Ό μ‘°νν©λλ€.
NotIn : μ£Όμ΄μ§ 컬λ μ
μ κ°μ΄ ν¬ν¨λμ§ μλ κ²½μ°λ₯Ό μ‘°νν©λλ€.
π μμ
List < User > findByAgeGreaterThan ( int age );
List < User > findByNameStartingWith ( String prefix );
List < User > findByEmailContaining ( String keyword );
List < User > findByIdIn ( List < Long > ids );
5οΈβ£ μ λ ¬νκΈ°
μ λ ¬μ΄ νμν κ²½μ° OrderBy ν€μλλ₯Ό μ¬μ©νμ¬ νλ μ΄λ¦κ³Ό λ°©ν₯(Asc λλ Desc)μ μ§μ ν©λλ€.
π μμ
List < User > findByNameOrderByAgeAsc ( String name );
List < User > findByNameOrderByAgeDesc ( String name );
6οΈβ£ νμ΄μ§ λ° μ λ ¬ νλΌλ―Έν°
Spring Data JPAλ Pageable λ° Sort νλΌλ―Έν°λ₯Ό μ§μνμ¬, λ©μλ μ΄λ¦μ OrderByλ₯Ό μΆκ°νμ§ μκ³ λ μ λ ¬κ³Ό νμ΄μ§μ μ μ©ν μ μμ΅λλ€.
π μμ
Page < User > findByAgeGreaterThan ( int age , Pageable pageable );
List < User > findByName ( String name , Sort sort );
7οΈβ£ 볡μ‘ν 쿼리 μμ± μμ
κ·μΉμ μ μ©νμ¬ λ€μν 쑰건μ ν¬ν¨ν λ©μλλ₯Ό μμ±ν μ μμ΅λλ€.
List < User > findByNameAndAgeGreaterThan ( String name , int age );
List < User > findByEmailContainingAndIsActiveTrue ( String keyword );
List < User > findByCreatedAtBetween ( Date startDate , Date endDate );
List < User > findByLastNamesStartingWithAndAgeLessThanOrderByAgeDesc ( String prefix , int age );
3οΈβ£ μμ½.
μ λμ¬ : findBy, countBy, existsBy, deleteBy λ±μ μ¬μ©.
쑰건 μ°κ²° : And, Orμ μ¬μ©νμ¬ μ¬λ¬ 쑰건μ μ°κ²°.
μ°μ°μ : IsNull, IsTrue, LessThan, GreaterThan, Containing, Like, Between λ±μ μ¬μ©νμ¬ νλμ λ€μν 쑰건 μ μ©.
μ λ ¬ : OrderByμ Asc λλ Descλ₯Ό μ¬μ©νμ¬ μ λ ¬ 쑰건μ μΆκ°.
νμ΄μ§κ³Ό μ λ ¬ νλΌλ―Έν° : Pageableκ³Ό Sort νλΌλ―Έν°λ₯Ό μ¬μ©νμ¬ νμ΄μ§ λ° μ λ ¬ κ°λ₯.