본문 바로가기
728x90
반응형

Dev170

[Spring Data JPA] 나머지 기능들 Specifications (명세) 언어에 상관없이 조건을 조립해서 쓸 수 있도록 만든 추상화한 개념 Predicate (술어) 참 또는 거짓으로 평가 AND, OR 같은 연산자로 조합해서 다양한 검색조건을 쉽게 생성 (컴포지트 패턴) 스프링 데이터 JPA는 org.springframework.data.jpa.domain.Specification 클래스로 정의 사용 방법 JpaSpecificationExecutor 인터페이스 상속 public interface MemberRepository extends JpaRepository, JpaSpecificationExecutor {} JpaSpecificationExecutor 인터페이스 public interface JpaSpecificationExecut.. 2021. 12. 19.
[Spring Data JPA] 스프링 데이터 JPA 분석 스프링 데이터 JPA 구현체 분석 스프링 데이터 JPA가 제공하는 공통 인터페이스의 구현체 (org.springframework.data.jpa.repository.support.SimpleJpaRepository) @Repository @Transactional(readOnly = true) public class SimpleJpaRepository ...{ @Transactional public S save(S entity) { if (entityInformation.isNew(entity)) { em.persist(entity); return entity; } else { return em.merge(entity); } } ... } @Repository 적용 (1) 스프링 빈의 컴포넌트 스캔 대상.. 2021. 12. 14.
[Spring Data JPA] 확장 기능 사용자 정의 레포지토리 구현 스프링 데이터 JPA 레포지토리는 인터페이스만 정의하고 구현체는 스프링이 자동 생성 스프링 데이터 JPA가 제공하는 인터페이스를 직접 구현하면 구현해야 하는 기능이 너무 많다. 만약 인터페이스의 메소드를 직접 구현하고 싶다면 (1) JPA 직접 사용(EntityManager) (2) 스프링 JDBC Template 사용 (3) MyBatis 사용 (4) 데이터베이스 커넥션 직접 사용 (5) QueryDSL 사용 을 해야한다. 사용자 정의 인터페이스 public interface MemberRepositoryCustom { List findMemberCustom(); } 사용자 정의 구현 클래스 @RequiredArgsConstructor public class MemberRe.. 2021. 12. 13.
[Spring Data JPA] 쿼리 메소드 기능 메소드 이름으로 쿼리 생성 메소드 이름을 분석하여 JPQL 쿼리를 생성, 실행한다. 순수 JPA 사용 // MemberJpaRepository public List findByUsernameAndAgeGrearterThan(String username, int age) { return em.createQuery("select m from Member m where m.username = :username and m.age > :age", Member.class) .setParameter("username", username) .setParameter("age", age) .getResultList(); } // MemberJpaRepositoryTest @Test public void findByUser.. 2021. 12. 9.
[Spring Data JPA] 공통 인터페이스 기능 순수 JPA 기반 레포지토리 만들기 순수 JPA를 기반으로 레포지토리를 만들어 추후 스프링 데이터 JPA에서는 어떻게 간단해지는지 알아보자 Member 레포지토리 package study.datajpa.repository; @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 findAll() { return em.createQuery("sel.. 2021. 11. 29.