JPA5 Querydsl Querydsl 설정 법 Querydsl vs JPQL //JPQL String qlString = "select m from Member m " + "where m.username = :username"; //Querydsl Member findMember = queryFactory .select(m) .from(m) .where(m.username.eq("member1"))//파라미터 바인딩 처리 .fetchOne(); 실행되는 JPQL 보기 spring.jpa.properties.hibernate.use_sql_comments: true 검색 쿼리 @Test public void search() { Member findMember = queryFactory .selectFrom(member) .wh.. 2023. 8. 26. Spring Data JPA 스프링 데이터 JPA 기반 MemberRepository public interface MemberRepository extends JpaRepository { } 공통 인터페이스 분석 public interface JpaRepository { ... } JpaRepository 인터페이스: 공통 CRUD 제공 Generic T : 엔티티 타입 ID : 식별자 타입(PK) Generic T : 엔티티 ID : 엔티티의 식별자 타입(PK) S : 엔티티와 그 자식 타입 주요 메서드 save(S) : 새로운 엔티티는 저장하고 이미 있는 엔티티는 병합한다. delete(T) : 엔티티 하나를 삭제한다. 내부에서 EntityManager.remove() 호출 findById(ID) : 엔티티 하나를 조회한다. .. 2023. 8. 24. JPA - API 개발 & 성능 최적화 ★ 절대 엔티티를 외부에 노출시키면 안된다!! 문제점 한 엔티티에 적용되는 API가 다양한데 한 엔티티에 상황에 맞는 각각의 모든 요청 요구사항을 담기는 어렵다. 엔티티가 변경되면 API 스펙이 변한다. 결론 : API 요청 스펙에 맞추어 별도의 DTO를 파라미터로 받는다. 지연 로딩과 조회 성능 최적화 ★ 지연 로딩(LAZY)을 피하기 위해 즉시 로딩(EARGR)으로 설정하면 안된다! 즉시 로딩 때문에 연관관계가 필요 없는 경우에도 데이터를 항상 조회해서 성능 문제가 발생할 수 있다. 즉시 로딩 설정시 SQL 문이 예측 불가능하므로 성능 문제가 발생할 수 있다. → 항상 지연 로딩으로 세팅하고 성능 최적화가 필요한 경우에는 페치 조인(fetch join)을 사용해라! N + 1 문제 (fetch joi.. 2023. 8. 24. JPA 도메인 분석 엔티티 클래스 개발 실무에서는 가급적 Getter는 열어두고, Setter는 꼭 필요한 경우에만 사용하는 것을 추천 Getter는 아무리 호출해도 호출 하는 것 만으로 어떤 일이 발생하지는 않는다. Setter를 호출하면 데이터가 변한다. ◎ 참고: 실무에서는 @ManyToMany 를 사용 금지! 중간 테이블( CATEGORY_ITEM )에 컬럼을 추가할 수 없고, 세밀하게 쿼리를 실행하기 어렵다. ◎ 참고: 값 타입은 변경 불가능하게 설계해야 한다. JPA 스펙상 엔티티나 임베디드 타입(@Embeddable)은 기본 생성자를 public 또는 protected 로 설정해야 한다. 엔티티 설계시 주의점 1. 엔티티에는 가급적 Setter를 사용하지 말자 → Setter가 모두 열려있다. 변경 포인트가 너.. 2023. 8. 22. 이전 1 2 다음