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 ํ๋ผ๋ฏธํฐ๋ฅผ ์ฌ์ฉํ์ฌ ํ์ด์ง ๋ฐ ์ ๋ ฌ ๊ฐ๋ฅ.