JPA (Java Persistence API)๋ฅผ ์ฌ์ฉํ๋ ๋ฐ์ดํฐ ์ก์ธ์ค๋ฅผ ์ฝ๊ฒ ๊ด๋ฆฌํ ์ ์๋๋ก ๋์์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
JPA์ ๋ณต์กํ ์ค์ ๊ณผ ๊ตฌํ์ ๋จ์ํํ๋ฉฐ, ๊ฐ๋ฐ์๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์
์
๋ ๊ฐํธํ๊ฒ ์ํํ ์ ์๋๋ก ๋ค์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
2-1.๋ฆฌํฌ์งํ ๋ฆฌ ์ธํฐํ์ด์ค ์๋ ์์ฑ
๊ฐ๋ฐ์๋ ๋ฆฌํฌ์งํ ๋ฆฌ ์ธํฐํ์ด์ค๋ฅผ ์ ์ํ๊ธฐ๋ง ํ๋ฉด Spring Data JPA๊ฐ ํ์ํ ๊ตฌํ์ ์๋์ผ๋ก ์์ฑํฉ๋๋ค.
JpaRepository, CrudRepository, PagingAndSortingRepository ๋ฑ์ ์ธํฐํ์ด์ค๋ฅผ ํตํด
CRUD ๋ฐ ํ์ด์ง๋ค์ด์
, ์ ๋ ฌ ์์
์ ์๋์ผ๋ก ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
๋ฉ์๋ ์ด๋ฆ์ ๊ธฐ๋ฐ์ผ๋ก ์๋์ผ๋ก ์ฟผ๋ฆฌ๋ฅผ ์์ฑํฉ๋๋ค.
public interface UserRepository extends JpaRepository <User , Long > {
User findByEmail (String email );
List <User > findByLastName (String lastName );
}
2-3.JPQL ๋ฐ ๋ค์ดํฐ๋ธ ์ฟผ๋ฆฌ
JPQL (Java Persistence Query Language)์ ์ฌ์ฉํ์ฌ ๋ณต์กํ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ ์ ์์ผ๋ฉฐ,
๋ค์ดํฐ๋ธ SQL ์ฟผ๋ฆฌ๋ ์ง์ํฉ๋๋ค.
@ Query ("SELECT u FROM User u WHERE u.email = ?1" )
User findByEmail (String email );
@ Query (value = "SELECT * FROM users WHERE email = ?1" , nativeQuery = true )
User findByEmailNative (String email );
ํ์ด์ง๋ค์ด์
๊ณผ ์ ๋ ฌ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ฌ,
๋๋์ ๋ฐ์ดํฐ๋ฅผ ํ์ด์ง ๋จ์๋ก ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
Page <User > findByLastName (String lastName , Pageable pageable );
2-5.์ปค์คํฐ๋ง์ด์ง ๋ฐ ํ์ฅ
์ฌ์ฉ์ ์ ์ ๋ฆฌํฌ์งํ ๋ฆฌ ์ธํฐํ์ด์ค์ ๊ตฌํ์ฒด๋ฅผ ์ถ๊ฐํ์ฌ
๋ณต์กํ ๋ฐ์ดํฐ ์ก์ธ์ค ๋ก์ง์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
public interface UserRepositoryCustom {
List <User > findUsersWithCustomQuery ();
}
public class UserRepositoryImpl implements UserRepositoryCustom {
@ PersistenceContext
private EntityManager entityManager ;
@ Override
public List <User > findUsersWithCustomQuery () {
// Custom JPQL or SQL query implementation
}
}