Home
>
Spring
>
๐[Spring] SimpleJpaRepository๋ ๋ฌด์์ผ๊น์?
Spring
Framework
๐[Spring] SimpleJpaRepository๋ ๋ฌด์์ผ๊น์?
SimpleJpaRepository
๋ Spring Data JPA(Java Persistence API)์์ ์ ๊ณตํ๋ ๊ธฐ๋ณธ Repository ๊ตฌํ ํด๋์ค ์
๋๋ค.
์ด ํด๋์ค๋ Spring Data JPA์ Repository ์ธํฐํ์ด์ค(CrudRepository
, JpaRepository
๋ฑ)๋ฅผ ๊ตฌํํ๋ฉฐ, ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ CRUD(์์ฑ(Create), ์กฐํ(Read), ์์ (Update), ์ญ์ (Delete)) ๊ธฐ๋ฅ์ ํฌํจํ๊ณ ์์ต๋๋ค.
1๏ธโฃ ์ญํ .
SimpleJpaRepository
๋ ๊ฐ๋ฐ์๊ฐ ์ ์ํ Repository ์ธํฐํ์ด์ค์ ๊ตฌํ์ฒด๋ก, ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ํธ์์ฉ์ ๊ฐํธํ๊ฒ ์ฒ๋ฆฌํ ์ ์๋๋ก ๋ค์ํ ๋ฉ์๋๋ฅผ ์ ๊ณตํฉ๋๋ค.
๊ฐ๋ฐ์๋ ์ง์ CRUD ๋ก์ง์ ๊ตฌํํ์ง ์๊ณ ๋, SimpleJpaRepository
๋ฅผ ํตํด ์๋์ผ๋ก ์ ๊ณต๋๋ ๊ธฐ๋ณธ CRUD ๋ฉ์๋๋ฅผ ํ์ฉํ ์ ์์ต๋๋ค.
2๏ธโฃ SimpleJpaRepository
์ ๋์ ๋ฐฉ์.
1๏ธโฃ ๊ธฐ๋ณธ CRUD ๋ฉ์๋ ์ ๊ณต.
SimpleJpaRepository
๋ save
, findById
, findAll
, delete
๋ฑ๊ณผ ๊ฐ์ ๊ธฐ๋ณธ์ ์ธ CRUD(์์ฑ(Create), ์กฐํ(Read), ์์ (Update), ์ญ์ (Delete)) ๋ฉ์๋๋ฅผ ๊ตฌํํฉ๋๋ค.
๊ฐ๋ฐ์๊ฐ JpaRepository
์ธํฐํ์ด์ค๋ฅผ ํ์ฅํ์ฌ ์ปค์คํ
Repository ์ธํฐํ์ด์ค๋ฅผ ์ ์ํ๋ฉด, Spring Data JPA๊ฐ ๋ฐํ์ ์์ ์ SimpleJpaRepository
๋ฅผ ์ฌ์ฉํด ํด๋น ์ธํฐํ์ด์ค์ ๊ตฌํ์ฒด๋ฅผ ์๋์ผ๋ก ์์ฑํฉ๋๋ค.
2๏ธโฃ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์๋ ์ํธ์์ฉ.
SimpleJpaRepository
๋ Hibernate ์ ๊ฐ์ JPA(Java Persistence API) ๊ตฌํ์ฒด์ ์ํธ์์ฉํ์ฌ, ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ๊ฑฐ๋ ์กฐํํ ๋ ํ์ํ SQL(Structured Query Language) ์ฟผ๋ฆฌ๋ฅผ ์๋์ผ๋ก ์์ฑํ๊ณ ์คํํฉ๋๋ค.
๊ฐ๋ฐ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ง์ ์ ์ธ ์ํธ์์ฉ์ ๊ตฌํํ ํ์๊ฐ ์๋ฏ๋ฉฐ, Spring Data JPA๊ฐ ์ด ๋ชจ๋ ๊ฒ์ ์๋์ผ๋ก ์ฒ๋ฆฌํฉ๋๋ค.
3๏ธโฃ ์ฟผ๋ฆฌ ๋ฉ์๋ ์ง์
SimpleJpaRepository
๋ ๋ฉ์๋ ์ด๋ฆ์ ๋ถ์ํ์ฌ ์ฟผ๋ฆฌ ๋ฉ์๋ ๋ฅผ ์๋์ผ๋ก ์์ฑํ๋ ๊ธฐ๋ฅ์ ์ง์ํฉ๋๋ค.
์๋ฅผ ๋ค์ด, findByName
๊ณผ ๊ฐ์ ๋ฉ์๋๋ฅผ ์ ์ํ๋ฉด, Spring Data JPA๋ ์๋์ผ๋ก name
ํ๋๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํฉ๋๋ค.
3๏ธโฃ SimpleJpaRepository
์ ๊ธฐ๋ณธ์ ์ธ CRUD ๋ฉ์๋.
SimpleJpaRepository
๋ ๋ค์๊ณผ ๊ฐ์ ๊ธฐ๋ณธ ๋ฉ์๋๋ฅผ ์ ๊ณตํฉ๋๋ค.
save(S entity)
์ํฐํฐ๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํฉ๋๋ค. ์ํฐํฐ๊ฐ ์ด๋ฏธ ์กด์ฌํ๋ฉด ์
๋ฐ์ดํธํ๊ณ , ์กด์ฌํ์ง ์์ผ๋ฉด ์๋ก ์ฝ์
ํฉ๋๋ค.
findById(ID id)
์ง์ ๋ ID๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ํฐํฐ๋ฅผ ์กฐํํฉ๋๋ค.
findAll()
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋ ๋ชจ๋ ์ํฐํฐ๋ฅผ ์กฐํํฉ๋๋ค.
delete(T entity)
๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ํฐํฐ๋ฅผ ์ญ์ ํฉ๋๋ค.
deleteById(ID id)
์ง์ ๋ ID๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ํฐํฐ๋ฅผ ์ญ์ ํฉ๋๋ค.
count()
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋ ์ํฐํฐ์ ์ด ๊ฐ์๋ฅผ ๋ฐํํฉ๋๋ค.
4๏ธโฃ ์ฌ์ฉ ์์.
๐ UserRepository
์ธํฐํ์ด์ค.
import org.springframework.data.jpa.repository.JpaRepository ;
public interface UseRepository extends JpaRepository < User , Long > {
User findByName ( String name );
}
์ ์์์์ UserRepository
๋ JpaRepository
๋ฅผ ์์ํ๊ณ ์์ผ๋ฉฐ, ์ด๋ฅผ ํตํด SimpleJpaRepository
๊ฐ UserRepository
์ ๊ตฌํ์ฒด๋ก ๋์ํ๊ฒ ๋ฉ๋๋ค.
findByName
, save
, findById
๋ฑ์ ๋ฉ์๋๋ฅผ ๋ณ๋๋ก ๊ตฌํํ์ง ์์๋, Spring Data JPA๊ฐ SimpleJpaRepository
๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ค์ ์๋์ผ๋ก ์ ๊ณตํด์ค๋๋ค.
๐ ์๋น์ค ํด๋์ค์์ ์ฌ์ฉ.
import org.springframework.beans.factory.annotation.Autowired ;
import org.springframework.stereotype.Service ;
import java.util.Optional ;
@Sevice
public class UserService {
private final UserRepository userRepository ;
@Autowired
public UserService ( UserRepository userRepository ) {
this . userRepository = userRepository ;
}
public User createUser ( String name , Integer age ) {
User user = new User ( name , age );
return userRepository . save ( user ); // SimpleJpaRepository์ save ๋ฉ์๋ ์ฌ์ฉ
}
public Optional < User > getUserById ( Long id ) {
return userRepository . findById ( id ); // SimpleJpaRepository์ findById ๋ฉ์๋ ์ฌ์ฉ
}
public void deleteUser ( Long id ) {
userRepository . deleteById ( id ); // SimpleJpaRepository์ deleteById ๋ฉ์๋ ์ฌ์ฉ
}
}
5๏ธโฃ SimpleJpaRepository
์ ํ์ฅ ๋ฐ ์ปค์คํฐ๋ง์ด์ง.
1๏ธโฃ ๊ธฐ๋ณธ ๊ธฐ๋ฅ ํ์ฅ.
๊ฐ๋ฐ์๋ SimpleJpaRepository
๊ฐ ์ ๊ณตํ๋ ๊ธฐ๋ณธ ๊ธฐ๋ฅ ์ธ์ ์ถ๊ฐ์ ์ธ ์ปค์คํ
๊ธฐ๋ฅ์ Repository์ ๊ตฌํํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, ๋ณต์กํ ์ฟผ๋ฆฌ๋ฅผ ์ง์ ์ ์ํ๊ฑฐ๋, ์ถ๊ฐ์ ์ธ ๋น์ฆ๋์ค ๋ก์ง์ ๊ตฌํํ ์ ์์ต๋๋ค.
2๏ธโฃ @Query
์ด๋
ธํ
์ด์
์ฌ์ฉ.
@Query
์ด๋
ธํ
์ด์
์ ์ฌ์ฉํ๋ฉด ๋ณต์กํ JPQL(Java Persistence Query Language) ๋๋ ๋ค์ดํฐ๋ธ SQL ์ฟผ๋ฆฌ๋ฅผ ์ง์ ์์ฑํ์ฌ ๋ฉ์๋์ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค.
import org.springframework.data.jpa.repository.Query ;
import org.springframework.data.repository.query.Param ;
public interface UserRepository extends JpaRepository < User , Long > {
@Query ( "SELECT u FROM User u WHERE u.name = :name AND u.age > :age" )
List < User > findByNameAndAgeGreaterThan ( @Param ( "name" ) String name , @Param ( "age" ) Integer age );
}
6๏ธโฃ ์์ฝ.
SimpleJpaRepository
๋ Spring Data JPA ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํ๋ CRUD ๊ธฐ๋ฅ์ ๊ตฌํ์ฒด๋ก, JpaRepository
์ธํฐํ์ด์ค๋ฅผ ํตํด ์๋์ผ๋ก ์์ฑ๋ฉ๋๋ค.
๊ฐ๋ฐ์๋ JpaRepository
๋ฅผ ์์๋ฐ๋ Repository ์ธํฐํ์ด์ค๋ฅผ ์ ์ํจ์ผ๋ก์จ SimpleJpaRepository
๊ฐ ์ ๊ณตํ๋ ์๋ CRUD ๊ธฐ๋ฅ ์ ํ์ฉํ ์ ์์ผ๋ฉฐ, ๋ฉ์๋ ์ด๋ฆ ๊ธฐ๋ฐ ์ฟผ๋ฆฌ, ์ปค์คํ
์ฟผ๋ฆฌ ๋ฑ์ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ํธ์์ฉ์ ๊ฐํธํ๊ฒ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
Spring Data JPA๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ํธ์์ฉ์ ๋จ์ํ ํ๊ณ , ์ฝ๋์ ๊ฐ๋
์ฑ๊ณผ ์ ์ง๋ณด์์ฑ ์ ๋์ด๋ ๋ฐ ํฐ ์ญํ ์ ํฉ๋๋ค.
SimpleJpaRepository
๋ ์ด๋ฌํ Spring Data JPA์ ํต์ฌ์ ๋ด๋นํ๋ ๊ธฐ๋ณธ ๊ตฌํ์ฒด์
๋๋ค.