Spring Data JPA์์ ์ ๊ณตํ๋ ๊ณตํต ์ธํฐํ์ด์ค๋ ์ฐ๋ฆฌ๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉํ๋ CRUD๋ฅผ ์ ๊ณตํด์ค๋ค. ์ฆ, ์์ํ๊ฒ JPA๋ฅผ ์ด์ฉํ Repository ํด๋์ค๋ฅผ ์์ฑํ์ฌ CRUD ๋ฉ์๋๋ค์ ์์ฑํด์๋ ๋ฒ๊ฑฐ๋ก์ด ์์ ๋ค์ Spring Data JPA์์ ์ ๊ณตํ๋ ๊ณตํต ์ธํฐํ์ด์ค์ธ JpaRepository๋ฅผ ์ด์ฉํ๋ฉด ๋์ ๊ตฌํ ํด๋์ค๋ฅผ ์์ฑํด์ค์ ๊ธฐ๋ณธ์ ์ธ CRUD๋ฅผ ์์ฑํ์ง ์์๋ ๋๋ค.
JpaRepository์ ์์ ๊ด๊ณ๋ ๋ค์๊ณผ ๊ฐ๋ค.
์ฃผ์ ๋ฉ์๋ ๋ฉ์๋
์ฃผ์ ๋ฉ์๋ | ์ค๋ช |
<S extends T> save(S entity) | ์๋ก์ด ์ํฐํฐ๋ ์ ์ฅํ๊ณ ์ด๋ฏธ ์๋ ์ํฐํฐ๋ ๋ณํฉ |
void delete(T entity) | ์ํฐํฐ ํ๋๋ฅผ ์ญ์ ํ๋ค. EntityManager.remove() ํธ์ถ |
Optional<T> findById(ID id) | ์ํฐํฐ ํ๋๋ฅผ ์กฐํํ๋ค. EntityManager.find() ํธ์ถ |
T getOne(Id id) | ์ํฐํฐ ํ๋ก์๋ก ์กฐํํ๋ค. ENtityManager.getReference() ํธ์ถ |
List<S> findAll(...) | ๋ชจ๋ ์ํฐํฐ๋ฅผ ์กฐํ. ์ ๋ ฌ(Sort)์ด๋ ํ์ด์ง(Pageable)์กฐ๊ฑด์ ํ๋ผ๋ฏธํฐ๋ก ์ ๊ณต ๊ฐ๋ฅ |
JpaRepository<T, ID> ์ฌ์ฉ ๋ฐฉ๋ฒ
์ฌ์ฉ ๋ฐฉ๋ฒ์ ๋งค์ฐ ๊ฐ๋จํ๋ค. Entityํด๋์ค ๋ช + Repository๋ก ์ธํฐํ์ด์ค๋ฅผ ์์ฑํ ํ JpaRepository๋ฅผ ์์๋ฐ์ผ๋ฉด ๋๋ค. JpaRepository๋ฅผ ์์๋ฐ์ผ๋ฉด ๊ตฌํ์ฒด์ธ SimpleJpaRepository๊ฐ ์์ฑ๋์ด ์์๋ฐ์ ๋ชจ๋ ๋ฉ์๋๋ค์ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค.
public interface MemberRepository extends JpaRepository<Member, Long> {
}
Hibernate์ QueryMethod
์ฐ๋ฆฌ๊ฐ ์ง๊ธ๊น์ง ๋ฐฐ์ ๋ ์์ ๋ฅผ ๋ค์ ํ๋ฒ ๊ฐ๋ณ๊ฒ ๋ด๋ณด์.
UserRepositoryTest.java
UserController.java
Test ์ฝ๋์ด๋ ์ด๋ค ์๋น์ค์ด๋ ๋ชจ๋ findById() ๋ฉ์๋๋ฅผ ํตํด์ id ๊ฐ์ผ๋ก ๊ฒ์์ ํ๋ค. ํ์ง๋ง ์๊ฐํด๋ณด๋ฉด ์ฐ๋ฆฌ๊ฐ ํ์ ๊ฒ์์ ํ ๋ ๋ค์๊ณผ ๊ฐ์ด ํ์ account ์ ๋ณด๋ฅผ ํตํด์ ๊ฒ์์ ํ๋ค.
์ง์ธ์ github id ๋ฅผ ๊ฒ์
์ฐ๋ฆฌ๋ ํ์ฌ DB๋ฅผ ๊ด๋ฆฌํ๊ณ ์์ผ๋ id ์นผ๋ผ์ ์ ์ ์๋ ๊ฒ์ด์ง, ์ค์ ์๋น์ค์์ id๋ฅผ ์ธ์ฐ๊ธฐ๋ ์ ๋ง ์ด๋ ค์ด ์ผ์ด๋ค. ๊ทธ๋์ ์ด๋ฐ ์ ์ QueryMethod๋ฅผ ํตํด์ ํ์์ account๋ก ๊ฒ์์ ํ ์ ์๊ฒ ํ๋ค.
findById๋ select๋ค.
์ง๊ธ๊น์ง ์ฐ๋ฆฌ๋ findById() ๋ฉ์๋๋ฅผ ํตํด์ id ๊ฐ์ผ๋ก ๊ฒ์์ ํ๋๋ฐ ์ด๋ ์ ํํ ๋ง ํ๋ฉด findBy๋ผ๋ ๋ฌธ๋ฒ์ ๋ณด๋ฉด JPA๊ฐ ์๋์ผ๋ก select ์ฟผ๋ฆฌ ๊ตฌ๋ฌธ์ ์คํ์ํค๋ ๊ฒ๊ณผ ๊ฐ์ ๋ง์ด๋ค.
QueryMethod๋ฅผ ๋ง๋ค์ด๋ณด์
์ฟผ๋ฆฌ ๋ฉ์๋๋ฅผ ๋ง๋ค๊ธฐ ์ํด์ ํด๋น repository ์ธํฐํ์ด์ค๋ก ์ด๋ํด์ผ ํ๋ค.
์ฐ๋ฆฌ๋ ํ์์ ์ด๋ฆ์ผ๋ก ์ ๋ณด๋ฅผ ๊ฒ์ํ ์์ ๋ฅผ ๋ง๋ค๊ธฐ ์ํด์ userRepository๋ก ์ด๋ํ๋ค. ๊ทธ๋ฆฌ๊ณ default ๊ฐ์ธ findById๋ฅผ ๋ณ๊ฒฝํ๊ธฐ ์ํด์ ๋ค์๊ณผ ๊ฐ์ด ํ๋๋ฐ findBy~์ ๋ค๋ ๊ฒ์์ผ๋ก ์ฌ์ฉํ ํด๋น ์นผ๋ผ ๋ช ์ ์ ์ด์ฃผ๋ฉด๋๋ค.
Optional๋ก User์ null ์ค๋ฅ๋ฅผ ํผํ ๋ค String ๋งค๊ฐ๋ณ์๋ก name ์ ๋ฐ์์ ํด๋น name์ ํ ๋๋ก JPA๊ฐ select ์ฟผ๋ฆฌ๋ฅผ ์งํํ๋ค.
select * from user where account = ? ์ ๊ตฌ๋ฌธ์ด ์คํ๋๋ ๊ฒ์ด๋ค.
์ด์ ์ฟผ๋ฆฌ ๋ฉ์๋๋ฅผ ํ ์คํธํด๋ณด์!
์ ์ํํ๋ฉด findById๊ฐ ์๋ findByName์ผ๋ก๋ ๊ฒ์์ด ๊ฐ๋ฅํ ๊ฒ์ ๋ณผ ์ ์๋ค.
์ฌ๋ฌ๊ฐ์ง ๊ฒ์๋ ๊ฐ๋ฅํ๋ค!!
ํ ๊ฐ์ง ์ ๋ณด๊ฐ ์๋๋ผ ์ฌ๋ฌ๊ฐ์ง ์ ๋ณด๋ฅผ ํตํด์ ๊ฒ์์ ํ๋ ๊ฒฝ์ฐ๋ ์๋๋ฐ ์ด๋ ์๋ฅผ ์ดํด ํ๋ค๋ฉด ์ ๋ง ์ฝ๋ค.
์ฐ์ ํด๋น Repository๋ก ์ด๋ํ ๋ค,
๋ select * from user where account = ? and name = ? ๊ณผ ๊ฐ์ ์ฟผ๋ฆฌ ๊ตฌ๋ฌธ์ด๋ค.
ref : https://wonit.tistory.com/138
[Spring & SpringBoot-JPA] JPA Query Method - JPA ์ฟผ๋ฆฌ ๋ฉ์๋๋ฅผ ์์๋ณด๊ณ ์ฌ์ฉํ์.
Hibernate์ QueryMethod ์ฐ๋ฆฌ๊ฐ ์ง๊ธ๊น์ง ๋ฐฐ์ ๋ ์์ ๋ฅผ ๋ค์ ํ๋ฒ ๊ฐ๋ณ๊ฒ ๋ด๋ณด์. Test ์ฝ๋์ด๋ ์ด๋ค ์๋น์ค์ด๋ ๋ชจ๋ findById() ๋ฉ์๋๋ฅผ ํตํด์ id ๊ฐ์ผ๋ก ๊ฒ์์ ํ๋ค. ํ์ง๋ง ์๊ฐํด๋ณด๋ฉด ์ฐ๋ฆฌ๊ฐ ํ
wonit.tistory.com
'Backend๐ฑ > Spring JPA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
JPA exists ์ฟผ๋ฆฌ ์ฑ๋ฅ ๊ฐ์ (0) | 2023.04.21 |
---|---|
JPA ๊ธฐ๋ณธ์์ฑ findBy (0) | 2023.04.21 |
Spring Data JPA 1. ์์๊ตฌ์กฐ์ ์ฃผ์ ์ธํฐํ์ด์ค (0) | 2023.04.19 |
[JPA] Spring JPA CascadeType ์ข ๋ฅ (0) | 2023.04.09 |
@Transactional์ ์ฌ์ฉํ๋ ์ด์ ๊ฐ ๋๋์ฒด ๋ญ๊น... ์ ์ฌ์ฉํ ๊น...? (0) | 2023.04.09 |