Spring DB 접근 기술 - Spring Data JPA

Article

Spring DB 접근 기술 - Spring Data JPA

Spring DB 접근 기술 - Spring Data JPA


- 개요
- JPA를 편하게 사용할 수 있도록 한번 더 감싼 기술
- JPA를 편리하게 사용하도록 도와주는 기술
- 인터페이스만으로 개발을 완료할 수 있다.
- 반복 개발해온 기본CRUD기능도 스프링 데이터JPA가 모두 제공
- JPA를 먼저 학습 후에 스프링 데이터 JPA를 보는 것이 더 좋다
- 개발자는 핵심 비즈니스 로직을 개발하는데 집중할 수 있다.
- 인터페이스의 생성
- 인터페이스가 인터페이스를 상속할 때는 extends 사용
- 스프링데이터 JPA가
- Repository 인터페이스에 대한 구현체를 스프링 데이터 JPA 내부적으로 만들어냄.
- 그리고 자동으로 스프링 빈에 등록시킴.
- 개발자가 등록할 필요가 없음.

- Code
 package net.linkednest.test.repository;

import net.linkednest.test.domain.Member;

import org.springframework.data.jpa.repository.JpaRepository;

import java.util.Optional;

public interface SpringDataJpaMemberRepository extends JpaRepository<Member, Long>, MemberRepository {

@Override

Optional<Member> findByName(String name);

}

- 일반적인 기본 CRUD는 스프링데이터 JPA가 제공하지만 임의의 테이블의 특정 컬럼을 조건으로 조회를 하려고 하면 메서드를 추가를 해줘야 한다.
- 위 코드에서 findByName이 있고, 다른 메서드들이 override되지 않은 이유.
- 페이징 기능 자동 제공한다고.
- 실무에서는 JPA와 Spring Data JPA를 기본으로 사용하지만
- 복잡한 동적 쿼리는 queryDsl이라는 라이브러리를 사용해서 처리해야 할 수도.
- 쿼리도 Java Code로 안전하게 작성 가능
- 동적쿼리도 편리하게(?) 작성가능하다고.
- JPA/Spring Data JPA/queryDsl로 해결하기 어려운 쿼리는
- JPA가 제공하는 네이티브 쿼리를 사용하거나
- jdbcTemplate을 사용하면 된다고 한다.
- JPA와 마이바티스 혼용도 가능하다고 함!!!

- SpringBean

- Code
 package net.linkednest.test;

import net.linkednest.test.repository.*;

import net.linkednest.test.service.MemberService;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

@Configuration

public class SpringConfig {

private final MemberRepository memberRepository;

public SpringConfig(MemberRepository memberRepository) {

this.memberRepository = memberRepository;

}

/*private DataSource dataSource;

@Autowired

public SpringConfig(DataSource dataSource) {

this.dataSource = dataSource;

}*/

/*private EntityManager em;

@Autowired

public SpringConfig(EntityManager em) {

this.em = em;

}*/

@Bean

public MemberService memberService() {

// return new MemberService(memberRepository());

return new MemberService(memberRepository);

}

/* @Bean

public MemberRepository memberRepository() {

return new JpaMemberRepository(em);

// return new JdbcTemplateMemberRepository(dataSource);

// return new JdbcMemberRepository(dataSource);

// return new MemoryMemberRepository();

}*/

}

Dev Jinwon's Share
f
t