자주 사용한 JPA와 QueryDSL 메서드들의 의미
1. em.createQuery(String query, Class<T> resultClass)
• 이 메서드는 **JPQL(JPA Query Language)**을 사용해 쿼리를 작성하고, 해당 쿼리로 지정한 엔티티 타입을 반환해. resultClass는 반환할 엔티티의 클래스 타입을 지정하는 것이야.
• 예시: em.createQuery("SELECT m FROM Member m", Member.class)는 Member 엔티티를 조회하는 JPQL 쿼리를 실행하는 코드야.
2. setParameter(String name, Object value)
• 파라미터 바인딩을 위해 사용돼. 쿼리에서 :name 형태로 정의된 파라미터에 값을 매핑해주는 역할을 해.
• 예시: .setParameter("name", userNameParam)는 JPQL에서 :name 파라미터에 userNameParam 값을 할당하는 코드야.
3. getResultList()
• 쿼리 실행 후, 리스트 형태로 결과를 반환하는 메서드야. 여러 결과를 반환할 때 사용해.
• 예시: query.getResultList()는 쿼리를 실행하고 결과를 리스트로 반환해.
4. getSingleResult()
• 쿼리 결과가 하나일 때 사용돼. 단일 결과를 반환하는 메서드로, 만약 결과가 없거나 여러 개일 경우 예외를 발생시켜.
• 예시: em.createQuery("SELECT m FROM Member m WHERE m.id = :id", Member.class).getSingleResult()는 특정 ID에 해당하는 Member 하나를 반환해.
5. em.persist(Object entity)
• 엔티티를 데이터베이스에 저장하는 메서드야. EntityManager를 통해 관리되는 객체를 데이터베이스에 영속시키는 역할을 해.
• 예시: em.persist(member)는 member 엔티티를 데이터베이스에 저장하는 코드야.
6. em.find(Class<T> entityClass, Object primaryKey)
• 기본 키(PK)를 통해 엔티티를 조회하는 메서드야. entityClass는 조회할 엔티티의 클래스, primaryKey는 그 엔티티의 기본 키 값을 의미해.
• 예시: em.find(Member.class, memberId)는 memberId에 해당하는 Member 엔티티를 조회하는 코드야.
7. em.flush()
• 영속성 컨텍스트의 변경 사항을 데이터베이스에 반영하는 메서드야. 트랜잭션이 끝나기 전에 명시적으로 데이터베이스와 동기화할 때 사용돼.
• 예시: em.flush()는 변경된 내용을 즉시 데이터베이스에 반영하는 메서드야.
8. em.clear()
• 영속성 컨텍스트를 초기화하는 메서드야. 영속성 컨텍스트에 있는 모든 엔티티를 비워서 관리되지 않게 만듦.
• 예시: em.clear()는 영속성 컨텍스트를 초기화하여 관리되고 있던 엔티티를 비우는 메서드야.
9. tx.begin() / tx.commit() / tx.rollback()
• 트랜잭션 시작, 커밋, 롤백을 위한 메서드야. tx.begin()으로 트랜잭션을 시작하고, 성공하면 tx.commit()으로 커밋해. 문제가 생기면 tx.rollback()으로 롤백해서 데이터베이스의 일관성을 유지해.
• 예시:
• tx.begin()은 트랜잭션을 시작하는 코드.
• tx.commit()은 트랜잭션을 완료하고 변경 사항을 확정하는 코드.
• tx.rollback()은 예외가 발생했을 때 트랜잭션을 취소하는 코드야.
10. QueryDSL 메서드들
• select() / selectFrom():
• QueryDSL에서 데이터를 선택할 때 사용하는 메서드야. select()는 특정 필드를 선택할 때 사용하고, selectFrom()은 엔티티 전체를 선택할 때 사용해.
• 예시: queryFactory.selectFrom(qMember)는 qMember 전체를 조회하는 코드야.
• where():
• 조건을 설정하는 메서드야. 주로 id, name 같은 필드를 기반으로 데이터를 필터링할 때 사용해.
• 예시: where(qMember.id.eq(memberId))는 id가 memberId인 조건을 설정하는 코드야.
• fetch() / fetchOne():
• fetch(): 쿼리 결과를 리스트로 반환하는 메서드.
• fetchOne(): 쿼리 결과가 하나일 때 사용되며, 단일 객체를 반환해.
• 예시: queryFactory.selectFrom(qMember).fetch()는 쿼리 결과를 리스트로 반환.
• join() / fetchJoin():
• join(): 엔티티 간의 관계를 조인할 때 사용해.
• fetchJoin(): 조인된 엔티티도 함께 가져와야 할 때 사용해.
• 예시: queryFactory.selectFrom(member).join(member.team, team).fetchJoin()은 Member와 Team을 조인하여 데이터를 함께 가져오는 코드야.
• groupBy() / having() / orderBy():
• groupBy(): 특정 필드를 기준으로 그룹화.
• having(): 그룹화한 결과에 조건을 추가할 때 사용해.
• orderBy(): 정렬 조건을 설정하는 메서드.
• 예시: groupBy(team.name).having(member.age.avg().goe(30))은 팀 이름을 기준으로 그룹화하고, 평균 나이가 30 이상인 그룹만 가져오는 조건을 설정하는 코드야.
요약:
• 위에서 사용한 모든 메서드가 JPA 및 QueryDSL의 주요 메서드들이며, 각각 데이터 조회, 삽입, 업데이트, 삭제, 트랜잭션 관리, 페이징, 조인, 서브쿼리, 그룹화 등의 다양한 작업을 수행해.
• 각 메서드가 어떤 역할을 하는지와 해당 메서드를 왜 사용하는지를 이해할 수 있도록 구체적인 설명을 추가했어.
'Note-Taking' 카테고리의 다른 글
Spring Framework의 주요 메서드와 기능 정리 (6) | 2024.09.24 |
---|---|
Java 메서드의 주요 개념과 정리 (2) | 2024.09.24 |
JPQL 핵심 정리 (1) | 2024.09.20 |
JPA 어노테이션의 핵심 정리 (0) | 2024.09.20 |
체이닝 메서드와 빌더 패턴을 활용한 자바 객체 관리 정리 (0) | 2024.09.19 |