Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
Tags
- 프로그래머스제일작은수
- java map 저장
- 코딩부트캠프후기
- 격파르타합격후기
- 격파르타장점
- java map
- java참조자료형
- 항해15기
- javaJVM
- java최솟값구하기
- 노베이스부트캠프
- java map 출력
- javaJRE
- 비전공자sqld
- 격파르타후기
- java list 저장
- java set 저장
- java기본자료형
- 격파르타비전공자
- 컴파일
- java 자료구조 활용
- sqld자격증합격
- java알고리즘문제풀이
- 인터프린터언어
- java알고리즘
- java list 출력
- java set 출력
- 프로그래머스
- 항해99후기
- 작은수제거하기
Archives
- Today
- Total
코딩과 결혼합니다
[Spring Data JPA] 순수 JPA와 Spring Data JPA 본문
728x90
순수한 JPA 기반 Repository를 구현했을 때와 Spring Data Jpa 기반으로 구현했을 때를 비교해 본다.
순수 JPA
@Repository
public class MemberJpaRepository {
@PersistenceContext
private EntityManager em;
public Member save(Member member) {
em.persist(member);
return member;
}
public void delete(Member member) {
em.remove(member);
}
public List<Member> findAll() {
return em.createQuery("select m from Member m", Member.class)
.getResultList();
}
public Optional<Member> findById(Long id) {
Member member = em.find(Member.class, id);
return Optional.ofNullable(member);
}
public long count() {
return em.createQuery("select count(m) from Member m", Long.class)
.getSingleResult();
}
public Member find(Long id) {
return em.find(Member.class, id);
}
}
member를 저장하고 단건, 리스트 조회, 삭제 등 CRUD를 개발자가 구현한다.
여기서 문제는 member가 아닌 team에 대한 CRUD 또한 거의 동일하게 일일이 구현해주어야 하는데
중복되는 코드들도 많으며 개발하는 데에 번거로움 또한 커진다.
Spring Data JPA
공통 인터페이스 설정
@Configuration
@EnableJpaRepositories(basePackages = "jpabook.jpashop.repository")
public class AppConfig {} @EnableJpaRepositories
@EnableJpaRepositories
- Spring 프레임워크에서 제공하는 어노테이션 중 하나로, JPA 리포지토리를 활성화
- basePackages 속성을 통해 JPA 리포지토리 인터페이스를 포함한 패키지를 지정할 수 있다.
- 이렇게 지정된 패키지 내의 JPA 리포지토리 인터페이스는 스프링이 자동으로 구현체를 생성하고 관리한다.
⭐SpringBoot 사용 시에는 생략이 가능하다.
@SpringBootApplication
public class DataJpaApplication {
public static void main(String[] args) {
SpringApplication.run(DataJpaApplication.class, args);
}
}
@SpringBootApplication로 위치를 지정한다. (해당 패키지와 하위 패키지를 인식해 줌)
public interface MemberRepository extends JpaRepository<Member, Long> {
}
Spring Data Jpa가 대신 구현클래스를(proxy 객체) 생성하고 관리해 주어 개발자가 직접 구현하지 않아도 된다.
때문에 굉장히 코드가 간략하다.
더하여 @Repository를 달아주지 않아도 컴포넌트 스캔을 Spring Data Jpa가 자동으로 인식하여 처리해준다.
'2세 > JPA' 카테고리의 다른 글
[Spring Data JPA] 쿼리 메서드(2) (0) | 2024.02.29 |
---|---|
[Spring Data JPA] 쿼리 메서드 (0) | 2024.02.28 |
[JPA] 컬렉션 조회 최적화(1) (0) | 2024.02.25 |
[JPA] 지연 로딩과 조회 성능 최적화(3) (1) | 2024.02.24 |
[JPA] 영속성 전이(CASCADE), 고아 객체 (0) | 2024.02.23 |