Note-Taking / / 2024. 9. 24. 13:52

JPQL과 QueryDSL 메서드 정리

자주 사용한 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))idmemberId인 조건을 설정하는 코드야.

fetch() / fetchOne():

fetch(): 쿼리 결과를 리스트로 반환하는 메서드.

fetchOne(): 쿼리 결과가 하나일 때 사용되며, 단일 객체를 반환해.

예시: queryFactory.selectFrom(qMember).fetch()는 쿼리 결과를 리스트로 반환.

join() / fetchJoin():

join(): 엔티티 간의 관계를 조인할 때 사용해.

fetchJoin(): 조인된 엔티티도 함께 가져와야 할 때 사용해.

예시: queryFactory.selectFrom(member).join(member.team, team).fetchJoin()MemberTeam을 조인하여 데이터를 함께 가져오는 코드야.

groupBy() / having() / orderBy():

groupBy(): 특정 필드를 기준으로 그룹화.

having(): 그룹화한 결과에 조건을 추가할 때 사용해.

orderBy(): 정렬 조건을 설정하는 메서드.

예시: groupBy(team.name).having(member.age.avg().goe(30))은 팀 이름을 기준으로 그룹화하고, 평균 나이가 30 이상인 그룹만 가져오는 조건을 설정하는 코드야.

 

요약:

 

위에서 사용한 모든 메서드가 JPA 및 QueryDSL의 주요 메서드들이며, 각각 데이터 조회, 삽입, 업데이트, 삭제, 트랜잭션 관리, 페이징, 조인, 서브쿼리, 그룹화 등의 다양한 작업을 수행해.

각 메서드가 어떤 역할을 하는지해당 메서드를 왜 사용하는지를 이해할 수 있도록 구체적인 설명을 추가했어.

  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유