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์ ํต์ฌ์ ๋ด๋นํ๋ ๊ธฐ๋ณธ ๊ตฌํ์ฒด์
๋๋ค.