์คํ๋ง ๋ถํธ์ JPA๋ง ์ฌ์ฉํด๋ ๊ฐ๋ฐ ์์ฐ์ฑ์ด ์ ๋ง ๋ง์ด ์ฆ๊ฐํ๊ณ , ๊ฐ๋ฐํด์ผํ ์ฝ๋๋ ํ์ฐํ ์ค์ด๋ญ๋๋ค.
์ฌ๊ธฐ์ ์คํ๋ง ๋ฐ์ดํฐ JPA๋ฅผ ์ฌ์ฉํ๋ฉด, ๊ธฐ์กด์ ํ๊ณ๋ฅผ ๋์ด ๋ง์น ๋ง๋ฒ์ฒ๋ผ,
๋ฆฌํฌ์งํ ๋ฆฌ์ ๊ตฌํ ํด๋์ค ์์ด ์ธํฐํ์ด์ค ๋ง์ผ๋ก ๊ฐ๋ฐ์ ์๋ฃํ ์ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ฐ๋ณต ๊ฐ๋ฐํด์จ ๊ธฐ๋ณธ CRUD ๊ธฐ๋ฅ๋ ์คํ๋ง ๋ฐ์ดํฐ JPA๊ฐ ๋ชจ๋ ์ ๊ณตํฉ๋๋ค.
์คํ๋ง ๋ถํธ์ JPA๋ผ๋ ๊ธฐ๋ฐ ์์, ์คํ๋ง ๋ฐ์ดํฐ JPA๋ผ๋ ํ์์ ์ธ ํ๋ ์์ํฌ๋ฅผ ๋ํ๋ฉด ๊ฐ๋ฐ์ด ์ ๋ง ์ฆ๊ฑฐ์์ง๋๋ค.
์ง๊ธ๊น์ง ์กฐ๊ธ์ด๋ผ๋ ๋จ์ํ๊ณ ๋ฐ๋ณต์ด๋ผ ์๊ฐํ๋ ๊ฐ๋ฐ ์ฝ๋๋ค์ด ํ์ฐํ๊ฒ ์ค์ด๋ญ๋๋ค.
๋ฐ๋ผ์ ๊ฐ๋ฐ์๋ ํต์ฌ ๋น์ฆ๋์ค ๋ก์ง์ ๊ฐ๋ฐํ๋๋ฐ, ์ง์คํ ์ ์์ต๋๋ค.
์ค๋ฌด์์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ์คํ๋ง ๋ฐ์ดํฐ JPA๋ ์ด์ ์ ํ์ด ์๋๋ผ ํ์ ์
๋๋ค.
์ฃผ์: ์คํ๋ง ๋ฐ์ดํฐ JPA๋ JPA๋ฅผ ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ๋๋ก ๋์์ฃผ๋ ๊ธฐ์ ์ ๋๋ค.
๋ฐ๋ผ์ JPA๋ฅผ ๋จผ์ ํ์ตํ ํ์ ์คํ๋ง ๋ฐ์ดํฐ JPA๋ฅผ ํ์ตํด์ผ ํฉ๋๋ค.
์์ JPA ์ค์ ์ ๊ทธ๋๋ก ์ฌ์ฉํ๋ค.
์คํ๋ง ๋ฐ์ดํฐ JPA ํ์ ๋ฆฌํฌ์งํ ๋ฆฌ
SpringDataJpaMemberRepository ์ธํฐํ์ด์ค ์์ฑ
package hello.hellospring.repository;
import hello.hellospring.domain.Member;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.Optional;
public interface SpringDataJpaMemberRepository extends JpaRepository<Member, Long>, MemberRepository {
Optional<Member> findByName(String name);
}
์คํ๋ง ๋ฐ์ดํฐ JPA๊ฐ SpringDataJpaMemberRepository ๋ฅผ ์คํ๋ง ๋น์ผ๋ก ์๋ ๋ฑ๋กํด์ค๋ค.
์ธํฐํ์ด์ค๊ฐ ์ธํฐํ์ด์ค๋ฅผ ๋ฐ์๋(์์)๋ extends / ์ธํฐํ์ด์ค๋ ๋ค์ค ์์์ด ๊ฐ๋ฅํ๋ค
JpaRepository<Member, Long> , MemberRepository ๋ฅผ ์์ ๋ฐ๋๋ค
JpaRepository<Member, Long>
<>์์๋ ์ํฐํฐ ํด๋์ค ์ด๋ฆ๊ณผ ID ํ๋ ํ์ ์ด ์ง์ ๋๋ค
JpaRepository ์ธํฐํ์ด์ค ์์ฑ
Spring Data JPA๋ "JpaRepository"๋ผ๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด ๋งค์ฐ ๊ฐ๋จํ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ ํ ์ ์๋๋ก ๋๋ค.
๊ทธ ๊ธฐ๋ณธ์ ์ธ ์ฌ์ฉ๋ฒ์ ์ค๋ช ํ๋ค.
JpaRepository๋ ์ธํฐํ์ด์ค์ด๋ค. ์ธํฐํ์ด์ค์ ๋ฏธ๋ฆฌ ๊ฒ์ ๋ฉ์๋๋ฅผ ์ ์ ํด ๋๋ ๊ฒ์ผ๋ก, ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ๊ฒ๋ง์ผ๋ก ์ค๋งํธํ ๋ฐ์ดํฐ ๊ฒ์์ ํ ์ ์๊ฒ ๋๋ ๊ฒ์ด๋ค.
JpaRepository ์ธํฐํ์ด์ค๋ org.springframework.data.jpa.repository ํจํค์ง์ "JpaRepository"๋ผ๋ ์ธํฐํ์ด์ค๋ฅผ ์์ํ์ฌ ๋ง๋ ๋ค. ์ด ์ธํฐํ์ด์ค๋ ๋ฒ์ฉ์ ์ผ๋ก ์ฌ์ฉํ๋ค.
public interface ์ด๋ฆ extends JpaRepository <์ํฐํฐ,ID์ ํ>
<>์์๋ ์ํฐํฐ ํด๋์ค ์ด๋ฆ๊ณผ ID ํ๋ ํ์ ์ด ์ง์ ๋๋ค
์๋ฐ extends, implements ์ฐจ์ด
ํ์ ๊ฐ์ฒด๋ ์์ ๊ฐ์ฒด (๋ถ๋ชจ)์ ํน์ง์ ๋ฌผ๋ ค๋ฐ๋๋ค
- extends
- ๋ถ๋ชจ์์ ์ ์ธ / ์ ์๋ฅผ ๋ชจ๋ํ๋ฉฐ ์์์ ๋ฉ์๋ / ๋ณ์๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ ์ ์์
- implements (interface ๊ตฌํ)
- ๋ถ๋ชจ ๊ฐ์ฒด๋ ์ ์ธ๋ง ํ๋ฉฐ ์ ์(๋ด์ฉ)์ ์์์์ ์ค๋ฒ๋ผ์ด๋ฉ (์ฌ์ ์) ํด์ ์ฌ์ฉํด์ผํจ
extends๋ ํด๋์ค๋ฅผ ํ์ฅํ๋ ๊ฑฐ๊ณ implements๋ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ๊ฒ์ด๋ค.
์คํ๋ง ๋ฐ์ดํฐ JPA ํ์ ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋๋ก ์คํ๋ง ์ค์ ๋ณ๊ฒฝ
package hello.hellospring;
import hello.hellospring.repository.*;
import hello.hellospring.service.MemberService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class SpringConfig {
private final MemberRepository memberRepository;
@Autowired
public SpringConfig(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
@Bean
public MemberService memberService() {
return new MemberService(memberRepository);
}
}
์คํ๋ง ์ปจํ ์ด๋์์ MemberRepository ๋ฅผ ์ฐพ๋๋ค
๊ทธ๋ฐ๋ฐ ๋ฑ๋กํ ๋น์ด ์์
--> ์คํ๋ง ๋ฐ์ดํฐ JPA๊ฐ SpringDataJpaMemberRepository ๋ฅผ ์คํ๋ง ๋น์ผ๋ก ์๋ ๋ฑ๋กํด์ค๋ค. ( ๊ตฌํ์ฒด๋ฅผ ์๋์ผ๋ก ๋ง๋ค์ด์ค๋ค )
์คํ๋ง ๋ฐ์ดํฐ JPA ์ ๊ณต ํด๋์ค
๊ณตํต์ ์ธ ๋ถ๋ถ์ ๊ฐ์ ธ๋ค ์ฐ๋ฉด ๋๋ค
์คํ๋ง ๋ฐ์ดํฐ JPA ์ ๊ณต ๊ธฐ๋ฅ
์ธํฐํ์ด์ค๋ฅผ ํตํ ๊ธฐ๋ณธ์ ์ธ CRUD
findByName() , findByEmail() ์ฒ๋ผ ๋ฉ์๋ ์ด๋ฆ ๋ง์ผ๋ก ์กฐํ ๊ธฐ๋ฅ ์ ๊ณต
ํ์ด์ง ๊ธฐ๋ฅ ์๋ ์ ๊ณต
์ธํฐํ์ด์ค๋ก ๊ณตํตํ ์ ์๋ ๋ถ๋ถ๋ค
Optional<Member> findByName(String name);
findByName ๊ท์น
JPQL // select m from Member m where m.name = ?
์ธํฐํ์ด์ค ์ด๋ฆ๋ง์ผ๋ก๋ ๊ฐ๋ฐ์ด ๋๋๋ค
์ฐธ๊ณ : ์ค๋ฌด์์๋ JPA์ ์คํ๋ง ๋ฐ์ดํฐ JPA๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ์ฌ์ฉํ๊ณ , ๋ณต์กํ ๋์ ์ฟผ๋ฆฌ๋ Querydsl์ด๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
Querydsl์ ์ฌ์ฉํ๋ฉด ์ฟผ๋ฆฌ๋ ์๋ฐ ์ฝ๋๋ก ์์ ํ๊ฒ ์์ฑํ ์ ์๊ณ , ๋์ ์ฟผ๋ฆฌ๋ ํธ๋ฆฌํ๊ฒ ์์ฑํ ์ ์๋ค.
์ด ์กฐํฉ์ผ๋ก ํด๊ฒฐํ๊ธฐ ์ด๋ ค์ด ์ฟผ๋ฆฌ๋ JPA๊ฐ ์ ๊ณตํ๋ ๋ค์ดํฐ๋ธ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ฑฐ๋, ์์ ํ์ตํ ์คํ๋ง JdbcTemplate๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
'Spring > Spring ์ ๋ฌธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์คํ๋ง ์ ๋ฌธ - (19) AOP (Aspect Oriented Programming) (0) | 2023.01.29 |
---|---|
์คํ๋ง ์ ๋ฌธ - (17) JPA(Java Persistence API) (0) | 2023.01.28 |
์คํ๋ง ์ ๋ฌธ - (16) ์คํ๋ง JdbcTemplate (0) | 2023.01.27 |
์คํ๋ง ์ ๋ฌธ - (15) ์คํ๋ง ํตํฉ ํ ์คํธ (0) | 2023.01.27 |
์คํ๋ง ์ ๋ฌธ - (14) ์คํ๋ง DB ์ ๊ทผ ๊ธฐ์ / ์์ Jdbc (0) | 2023.01.26 |