Skip to content

Latest commit

ย 

History

History
66 lines (48 loc) ยท 2.15 KB

Spring Data JPA.md

File metadata and controls

66 lines (48 loc) ยท 2.15 KB

1.Spring Data JPA

JPA (Java Persistence API)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค๋ฅผ ์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
JPA์˜ ๋ณต์žกํ•œ ์„ค์ •๊ณผ ๊ตฌํ˜„์„ ๋‹จ์ˆœํ™”ํ•˜๋ฉฐ, ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—…์„
๋” ๊ฐ„ํŽธํ•˜๊ฒŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

2.Spring Data JPA ๊ธฐ๋Šฅ

2-1.๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์ธํ„ฐํŽ˜์ด์Šค ์ž๋™ ์ƒ์„ฑ

๊ฐœ๋ฐœ์ž๋Š” ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ •์˜ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด Spring Data JPA๊ฐ€ ํ•„์š”ํ•œ ๊ตฌํ˜„์„ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
JpaRepository, CrudRepository, PagingAndSortingRepository ๋“ฑ์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด
CRUD ๋ฐ ํŽ˜์ด์ง€๋„ค์ด์…˜, ์ •๋ ฌ ์ž‘์—…์„ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2-2.์ฟผ๋ฆฌ ๋ฉ”์„œ๋“œ

๋ฉ”์„œ๋“œ ์ด๋ฆ„์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž๋™์œผ๋กœ ์ฟผ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
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);

2-4.ํŽ˜์ด์ง• ๋ฐ ์ •๋ ฌ

ํŽ˜์ด์ง€๋„ค์ด์…˜๊ณผ ์ •๋ ฌ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์—ฌ, 
๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํŽ˜์ด์ง€ ๋‹จ์œ„๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
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
    }
}