JpaRepository - PagingAndSortingRepository - CrudRepository - Repository
์ด๋ฌํ ์์ ๊ตฌ์กฐ์ ๊ฐ ์ธํฐํ์ด์ค์ ์ญํ ์ ์ดํดํด๋ณด์.
์ ์ผ ๋ฐ๋จ์ ์๋ ์์ํ ๊ธฐ์ ์ ํนํ๋ JpaRepository๋ฅผ ๋นผ๋ฉด ๋๋จธ์ง ๋ค๋ฅธ ์์ํ ๊ธฐ์ ์ฉ
๋ฆฌํ์งํ ๋ฆฌ์์๋ ์ฌ์ฌ์ฉํ๋ ๊ณต์ฉ ์ธํฐํ์ด์ค๋ค์ด๋ค. ์ด ์ธํฐํ์ด์ค๋ค์ ์์ธํ ์ดํด๋ณด์.
Spring Data Repository ์ฌ์ฉํ๊ธฐ
๋ค์ํ ์์์ฑ ์ ์ฅ์๋ฅผ ์ํด ๋ฐ์ดํฐ ์ ๊ทผ ๋ ์ด์ด๋ฅผ ๊ตฌ์ฑํ ๋
์ฝ๋๋ค์ ์์ ์๋นํ ์ค์ผ ์ ์๋๋ก ํ๋ ๊ฒ Repository์ด๋ค.
๋ค์ํ ์ฟผ๋ฆฌ ํค์๋๋ฅผ ์ ๊ณตํ๋๋ฐ ์ฐ๋ฆฌ๊ฐ Repository๋ฅผ ๋ง๋ค๊ณ ๋ฉ์๋๋ฅผ ๋ง๋ ๋ค.
์ด๋ ๋ฉ์๋์ ํน์ ํ ํค์๋๋ฅผ ๋ง๋ ๋ค๋ฉด ์ฟผ๋ฆฌ๋ฅผ ๋ง๋ค์ด์ฃผ๊ฒ ๋๋ค.
์๋ฅผ๋ค์ด findBy๋ผ๋ ํค์๋ ๋ฑ์ Spring Data Repository๊ฐ ์๊ณ ์๊ณ
๋ฐ๋ผ์ ์ด ๋ฉ์๋ ์์์ ์คํ๋ผ์ผ ํ ์ฟผ๋ฆฌ๋ฅผ Spring Data JPA๊ฐ ์ ์์๋ค.
Spring Data Repository ์ถ์ํ์ ๊ฐ์ฅ ์ค์ฌ์ ์ธํฐํ์ด์ค๋ Repository์ด๋ค.
ํ์ ์๊ท๋จผํธ๋ก ๋๋ฉ์ธ์ ํ์ ๊ณผ ๋๋ฉ์ธ์์ ์ฌ์ฉํ๋ ID์ ํ์ ์ ํ๋ผ๋ฏธํฐ๋ก ์ค์ผ ํ๋ค.
์ด Repository ์ธํฐํ์ด์ค ์์ฒด๋ ์๋ฌด๊ฒ๋ ์๊ณ ์ต์์์ ์ธํฐํ์ด์ค์ด๋ค. ์ด ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ
CrudRepository ๊ฐ ์ค์ง์ ์ผ๋ก ๋ค์ํ CRUD์ ๊ธฐ๋ฅ๋ค์ ์ ์ํ๊ณ ์๋ค.
๊ธฐ๋ณธ์ ์ธ CRUD ์ธํฐํ์ด์ค๋ฅผ ๋ช ๊ฐ์ง ๋ณด๋ฉด
1. save
- save๋ฅผ ํ๋ฉด var1์ ์ธ์ด๋ธํ ๊ฒฐ๊ด๊ฐ์ ๋ํด ์ ์ฅ๋ผ์๋ ์ํฐํฐ๋ฅผ ๋ค์ ํ๋ฒ ๋ฆฌํดํด์ค๋ค.
2. saveAll
- saveAll์ ์ฌ๋ฌ ์ํฐํฐ๋ฅผ ๋์์ ์ ์ฅํ ๋ ์ฐ์ธ๋ค. ๋์์ ์ ์ฅ๋ ๋ชจ๋ ์ํฐํฐ๋ค์ด Iterable๋ก ๋์ค๊ฒ ๋๋ค.
์ด๋ best practice๋ save ํ์ ํ๋ผ๋ฏธํฐ์ ์ํฐํฐ๊ฐ ์๋ ๋ฆฌํด๋ผ์ ๋์จ ์ํฐํฐ๋ฅผ ์จ์ผ ํ๋ค.
3. findById
- findById๊ฐ ๊ธฐ๋ณธ์ผ๋ก ์ ๊ณต์ด ๋๋ค. Optional์ ์ฐ๊ณ ์๊ธฐ ๋๋ฌธ์ Null์ด ๋์ค์ง ์๋๋ค.
4. existsById
- ์กด์ฌํ๋์ง ์ ํ๋์ง ํ์ธํ๊ธฐ ์ํด boolean์ ํ์ธํ๋ existsById์ด๋ค.
5. count
- ํ์ฌ ๊ฐ์๊ฐ ๋ช ๊ฐ ์ธ์ง
6. deleteById
- delete๋ค์ void ํ์ด๋ค.
์์์ฑ ๊ธฐ์ ์ ํนํ๋ ์ถ์ํ๋ฅผ ์ ๊ณตํ๋๋ฐ Jpa๋ฉด JpaRepository MongoDB ๋ฉด mongoRepository
๋ฑ. ์ด ์ธํฐํ์ด์ค๋ค์ CrudRepository๋ฅผ ํ์ฅํ๊ณ ์๊ณ ์์ํ ๊ธฐ์ ์ ๊ด๋ จ๋ ๋ ๋ง์ ๊ธฐ๋ฅ๋ค์ ์ ๊ณตํ๋ค๊ณ ํ๋ค.
CrudRepository๋ฅผ ๊ธฐ๋ฐ์ผ๋ก PaginAndSortingRepository๋ฅผ ๋ง๋ค์ด์ ํ์ด์ง์ ์ํธ์ ๊ด๋ จ๋
๋ฉ์๋๋ค์ด ์ถ๊ฐ๊ฐ ๋๊ฒ ๋๋ค.
๋ค์๊ณผ ๊ฐ์ด CrudRepository๋ฅผ ์์๋ฐ๋ ๊ตฌ์กฐ๋ก findAll์ Sort๋ผ๋ ํ๋ผ๋ฏธํฐ๋ฅผ ๋ฐ๊ณ ์๋ค.
๊ทธ๋์ find ํ ๋ ์ ๋ ฌ์ ๊ด๋ จ๋ ์ต์ ์ ๋ฌ ์ ์๋ค.
์ด๋ค ํ๋กํผํฐ ๊ธฐ์ค์ผ๋ก ์ด๋ค ๋ฐฉํฅ์ผ๋ก ( ๋ด๋ฆผ์ฐจ์ ์ค๋ฆ์ฐจ์ ) ์ ํ๋ ๊ฒ Order์ด๊ณ Order
์ ๋ชฉ๋ก์ ๋ฐ๋ ๊ฒ์ด Sort์ด๋ค.
Sort ์ธ์๋ Page๋ฅผ ๋ฐํํ๋ findAll์ด ์๋๋ฐ ๋ณดํต์ ๋ค Paging์ ํ๊ธฐ ๋๋ฌธ์ ์ด findAll์
๊ฐ์ฅ ๋ง์ด ์ฐ๋ ๊ฒ์ผ๋ก ์๊ณ ์๋ค. ์ด findAll์ Sort์ Paging์ด ํฉ์ณ์ ธ ์๊ฒ ๋๋๋ฐ
์ด๋ ํ ์ ๋ ฌ ์กฐ๊ฑด๊ณผ ์ด๋ค ํ์ด์ง๋ฅผ ๋ฆฌํดํ๊ฒ ํ ๊ฒ์ธ์ง ( ์ฒซ ํ์ด์ง์ ๊ด๋ จ๋ ๋ด์ฉ, ๋ ๋ฒ์งธ ํ์ด์ง์ ๊ดํ ๋ด์ฉ ๋ฑ )
๊ฐ ๋๊ฒ ๋ค.
๊ทธ๋ ๊ฒ PageRequest๋ฅผ ๋ง๋ค์ด์ ํ๋ผ๋ฏธํฐ๋ก ์ฃผ๋ฉด ๊ทธ๋งํผ์ ๋ํ ์ ๋ณด๋ฅผ ๊ฐ์ง Pageํ์ ์ผ๋ก ๋ฆฌํด์ ํด์ค๋ค.
์ฟผ๋ฆฌ ๋ฉ์๋๋ฅผ ๋ง๋๋ 4๊ฐ์ง ์คํ ๋ค
1. ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ์์ํ ์ธํฐํ์ด์ค ๋ง๋ค๊ธฐ
-์ํฐํฐ ํ์ ๊ณผ ํค ํ์ ์ ์ฃผ์ด์ผํ๋ค.
2. ์ฟผ๋ฆฌ ๋ฉ์๋ ์ธํฐํ์ด์ค์ ์ ์ํ๊ธฐ
3. ์ด๋ฐ ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ์ ์ํ๋ค๋ฉด ๊ทธ๋ฅ ๋ง๋ค์ด์ง๋๊ฒ ์๋ ํ์ฑํ๋ฅผ ์์ผ์ผ ํ๋ค.
- PersonRepository๋ฅผ ์ฐพ์์ ์ด ํ์ ์ ํด๋นํ๋ Bean์ ๋ง๋ค์ด์
- ApplicationContext์ ๋ฑ๋ก ํด์ฃผ๋๋ก
- ๋ฐ๋ผ์ @EnableJpaRepositories ๋ฅผ ํตํด ํ์ฑํ ํด์ฃผ์ด์ผ ํ๋ค.
(ํ์ง๋ง ์คํ๋ง ๋ถํธ๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค๋ฉด ์ด๋ฐ ์ ๋ ธํ ์ด์ ์ ์๋์ผ๋ก ์ค์ ์ด ๋๋ค.)
4. ์ด์ ํด๋น ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ์ฃผ์ ๋ฐ์์ ์ฌ์ฉํ๋ฉด ๋๋ค.
- H2 DB๋ฅผ ํตํ ๊ฐ๋จํ ์ค์ต
ref : https://100100e.tistory.com/348
Spring Data JPA 1. ์์๊ตฌ์กฐ์ ์ฃผ์ ์ธํฐํ์ด์ค
JpaRepository - PagingAndSortingRepository - CrudRepository - Repository ์ด๋ฌํ ์์ ๊ตฌ์กฐ์ ๊ฐ ์ธํฐํ์ด์ค์ ์ญํ ์ ์ดํดํด๋ณด์. ์ ์ผ ๋ฐ๋จ์ ์๋ ์์ํ ๊ธฐ์ ์ ํนํ๋ JpaRepository๋ฅผ ๋นผ๋ฉด ๋๋จธ์ง ๋ค๋ฅธ ์์ํ
100100e.tistory.com
'Backend๐ฑ > Spring JPA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
JPA ๊ธฐ๋ณธ์์ฑ findBy (0) | 2023.04.21 |
---|---|
[JPA] ์ฟผ๋ฆฌ ๋ฉ์๋ ์ฌ์ฉ (1) | 2023.04.20 |
[JPA] Spring JPA CascadeType ์ข ๋ฅ (0) | 2023.04.09 |
@Transactional์ ์ฌ์ฉํ๋ ์ด์ ๊ฐ ๋๋์ฒด ๋ญ๊น... ์ ์ฌ์ฉํ ๊น...? (0) | 2023.04.09 |
[JPA] - @JoinColumn๊ณผ ์ฐ๊ด๊ด๊ณ์ ์ฃผ์ธ (mappedBy) (0) | 2023.04.09 |