inflearn

아래 세가지 지원 기능은 제약이 커서 복잡한 실무 환경에서의 사용은 선택적으로! 1. 인터페이스 지원 - QuerydslPredicateExecutor Pageable, Sort 지원 // 리포지토리에 적용 public interface MemberRepository extends JpaRepository, CustomMemberRepository, QuerydslPredicateExecutor { ... } // 서비스에서 사용 Iterable result = memberRepository.findAll( member.age.between(10, 40) .and(member.username.eq("1"))); 한계 외부 조인 불가능 (묵시적 조인 가능) 클라이언트가 Querydsl 구현기술에 의존 2...
스프링 데이터 JPA 리포지토리로 변경 public interface MemberRepository extends JpaRepository { List findByUsername(String username); } 테스트 @SpringBootTest @Transactional class MemberRepositoryTest { @Autowired EntityManager em; @Autowired MemberRepository memberRepository; @Test public void basicTest() { Member member = new Member("member1", 10); memberRepository.save(member); Member findMember = memberReposit..
순수 JPA 리포지토리와 Querydsl 스프링이 주입하는 em은 실제 동작 시점에 트랜잭션 단위로 진짜 엔티티 매니저를 찾아주는 프록시 엔티티 매니저임 JPAQueryFactory를 메인 어플리케이션 클래스에 Bean으로 등록하고, 리포지토리에서 주입받아도 됨 장점: @RequiredArgsConstructor 활용해 리포지토리 코드 짤 때 깔끔함 단점: 두 개를 주입받아야 하므로 테스트코드 짤 때 불편함 @Bean JPAQueryFactory jpaQueryFactory(EntityManager em) { return new JPAQueryFactory(em); } 리포지토리 @Repository public class MemberJpaRepository { private final EntityMan..
* F2: IntelliJ 오류난 곳으로 바로 이동 프로젝션과 결과 반환 - 기본 프로젝션: select 대상 지정 튜플은 querydsl 종속적인 자료형이기 때문에 repository 계층이 아닌 controller나 service 단에서는 사용 지양 다른 계층으로 넘길 때는 DTO 사용 권장 // 프로젝션 대상 하나 @Test public void simpleProjection() { List result = queryFactory .select(member.username) // 이름만 지정 .from(member) .fetch(); for (String s : result) { System.out.println("s = " + s); } } // 프로젝션 대상 여러개 @Test public voi..
문법예) select m from Member as m where m.age > 18엔티티와 속성은 대소문자 구분 (Member, age)JPQL 키워드는 대소문자 구분 X (select, from, where)엔티티 이름 사용 (테이블명 X)별칭 필수 (m), as 생략 가능집합과 정렬TypeQuery, QueryTypeQuery: 반환 타입 명확할 때Query: 반환 타입 명확하지 않을 때 TypedQuery q1 = em.createQuery("select m from Member as m where m.age > 18", Member.class); Query q2 = em.createQuery("select m.username, m.age from Member as m where m.a..
상속관계 매핑: 객체의 상속 관계와 DB의 슈퍼타입, 서브타입 관계 매핑 객체는 상속관계 존재 RDB는 상속관계 X 슈퍼타입, 서브타입 관계라는 유사한 논리 모델링 기법 존재 이 논리 모델을 물리 모델로 구현하는 방법 1. 조인 전략 2. 단일 테이블 전략 3. 구현 클래스마다 테이블 전략 객체 입장에서는 아무 변화가 없고, DB설계를 어떻게 할 것이냐 결정하는 것 JPA는 세가지 방법 모두 지원 (기본 설정: 단일 테이블 전략) // Item class @Entity public class Item { @Id @GeneratedValue private Long id; private String name; private int price; // Album class @Entity public class ..
1. 환경 세팅 h2 database 사용 maven 설정 hibernate 버전은 사용하고자 하는 스프링 버전에 맞는 것으로 설정하면 좋다 spring.io -> projects -> spring boot -> Learn -> 스프링 버전에 맞는 doc -> 'org.hibernate'로 검색해 버전 확인 h2는 설치한 버전과 같아야 한다 JPA 설정: /META-INF/persistence.xml persistance-unit에 name속성으로 이름 지정 javax.persistence.~~ : JPA 표준 속성 hibernate.~~ : hibernate 전용 속성 DB 방언: DB마다 구문에 차이가 있기 때문에 어떤 방언을 사용할 것인지 알려주어야 한다 hibernate는 40가지 이상의 DB 방..
JAVA 진영에서의 ORM 표준 기술인 JPA의 필요성은 여러 자료를 통해 머리로는 대충 알고 있었지만, 영한님 설명을 통해 좀 더 와닿게 되었다 1. 상속 Item 객체를 상속받은 Album 객체를 RDB에 저장할 때 앨범을 필드단위로 분해하여 우측의 ITEM, ALBUM 테이블에 각각 적절하게 저장해주기 위해 INSERT SQL문도 각각 작성하여 두번 날려야 한다 DB에서 ALBUM 객체를 조회할 때는 우측의 ITEM, ALBUM 테이블을 JOIN SQL문으로 묶어주고 그것을 다시 객체로 매핑해준 후 반환한다 이렇게 SQL 의존적이고 복잡한 과정을 피하기 위해 DB에 저장할 객체에는 상속관계를 사용하지 않게 된다고 한다 2. 연관관계 객체 지향적으로 모델링하는 경우에 저장할 때는 크게 문제가 없다 대..
hjkim0502
'inflearn' 태그의 글 목록