Spring Data JPA๋ JpaRepository๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋์ฑ ์ฝ๊ฒ DB๋ฅผ ์ฌ์ฉํ ์ ์๋ ์ํคํ
์ฒ๋ฅผ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์, ์คํ๋ง ๋ถํธ๋ก
JpaRepository๋ฅผ ์์๋ฐ๋ ์ธํฐํ์ด์ค๋ฅผ ์์ฑํ๋ฉด ๊ธฐ์กด์ ๋ค์ํ ๋ฉ์๋๋ฅผ ์์ฝ๊ฒ ํ์ฉํ ์ ์๋ค.
๋ฆฌํฌ์งํ ๋ฆฌ ์ธํฐํ์ด์ค ์์ฑ
์ํฐํฐ๋ฅผ DB ํ ์ด๋ธ๊ณผ ๊ตฌ์กฐ๋ฅผ ์์ฑํ๋ ๋ฐ ์ฌ์ฉํ๋ค๋ฉด, Spring Data JPA๊ฐ ์ ๊ณตํ๋ ์ธํฐํ์ด์ค์ธ ๋ฆฌํฌ์งํ ๋ฆฌ(Repository)๋ ์ํฐํฐ๊ฐ ์์ฑํ DB์ ์ ๊ทผํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ์์ฑํ๊ธฐ ์ํด์๋ ์ ๊ทผํ๋ ค๋ ํ ์ด๋ธ๊ณผ ๋งคํ๋๋ ์ํฐํฐ์ ๋ํ ์ธํฐํ์ด์ค๋ฅผ ์์ฑํ๊ณ , JpaRepository๋ฅผ ์์๋ฐ์ผ๋ฉด ๋๋ค.
public interface ProductRepository extends JpaRepository<Product, Long> {
}
JpaRepository๋ฅผ ์์๋ฐ์ ๋๋ ๋์ ์ํฐํฐ์ ๊ธฐ๋ณธ๊ฐ ํ์
์ ์ง์ ํด์ผ ํ๋๋ฐ, ์์ ๊ฐ์ด ๋์ ์ํฐํฐ๋ฅผ Product๋ก ์ค์ ํ๊ณ ํด๋น ์ํฐํฐ์ @Id
์ ํ๋ ํ์
์ธ Long์ ์ค์ ํ๋ฉด ๋๋ค.
์์ฑ๋ ๋ฆฌํฌ์งํ ๋ฆฌ๋ JpaRepository๋ฅผ ์์๋ฐ๊ธฐ ๋๋ฌธ์ ๋ณ๋์ ๋ฉ์๋ ๊ตฌํ ์์ด๋ ๋ง์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
@NoRepositoryBean
public interface JpaRepository<T, ID> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T> {
@Override
List<T> findAll();
@Override
List<T> findAll(Sort sort);
@Override
List<T> findAllById(Iterable<ID> ids);
@Override
<S extends T> List<S> saveAll(Iterable<S> entities);
void flush();
<S extends T> S saveAndFlush(S entity);
<S extends T> List<S> saveAllAndFlush(Iterable<S> entities);
void deleteAllInBatch(Iterable<T> entities);
void deleteAllByIdInBatch(Iterable<ID> ids);
void deleteAllInBatch();
T getReferenceById(ID id);
@Override
<S extends T> List<S> findAll(Example<S> example);
@Override
<S extends T> List<S> findAll(Example<S> example, Sort sort);
}
๋ฆฌํฌ์งํ ๋ฆฌ ๋ฉ์๋ ์์ฑ ๊ท์น
๋ฆฌํฌ์งํ ๋ฆฌ์์๋ ๋ช ๊ฐ์ง ๋ช ๋ช ๊ท์น์ ๋ฐ๋ผ ์ปค์คํ ๋ฉ์๋๋ ์์ฑํ ์ ์๋ค. ์ผ๋ฐ์ ์ผ๋ก CRUD์์ ๋ฐ๋ก ์์ฑํด์ ์ฌ์ฉํ๋ ๋ฉ์๋๋ ๋๋ถ๋ถ Read์ ํด๋นํ๋ Select ์ฟผ๋ฆฌ์ธ๋ฐ, ์ด๋ ์ํฐํฐ๋ฅผ ์ ์ฅ/๊ฐฑ์ /์ญ์ ํ ๋๋ ์ผ๋ฐ์ ์ผ๋ก ๋ณ๋์ ๊ท์น์ด ํ์ํ์ง ์๊ณ ๋ฆฌํฌ์งํ ๋ฆฌ์์ ๊ธฐ๋ณธ์ผ๋ก ์ ๊ณตํ๋ ์กฐํ ๋ฉ์๋๋ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ๋จ์ผ ์กฐํํ๊ฑฐ๋ ์ ์ฒด ์ํฐํฐ๋ฅผ ์กฐํํ๋ ๊ฒ๋ง ์ง์ํ๊ณ ์๊ธฐ ๋๋ฌธ์ ํ์์ ๋ฐ๋ผ ๋ค๋ฅธ ์กฐํ ๋ฉ์๋๊ฐ ํ์ํ๊ธฐ ๋๋ฌธ์ด๋ค.
๋ฉ์๋์ ์ด๋ฆ์ ๋ถ์ผ ๋๋ ์ฒซ ๋จ์ด๋ฅผ ์ ์ธํ ์ดํ ๋จ์ด๋ค์ ์ฒซ ๊ธ์๋ฅผ ๋๋ฌธ์๋ก ์ค์ ํด์ผ JPA์์ ์ ์์ ์ผ๋ก ์ธ์ํ๊ณ ์ฟผ๋ฆฌ๋ฅผ ์๋์ผ๋ก ๋ง๋ค์ด์ค ์ ์๋ค.