오봉이와 함께하는 개발 블로그
Querydsl - JPQL vs Querydsl 본문
728x90
시작 - JPQL vs Querydsl
테스트 기본 코드
지금부터는 이 예제로 실행한다.
@SpringBootTest
@Transactional
public class QuerydslBasicTest {
@Autowired
EntityManager em;
@BeforeEach
public void before() {
Team teamA = new Team("teamA");
Team teamB = new Team("teamB");
em.persist(teamA);
em.persist(teamB);
Member member1 = new Member("member1", 10, teamA);
Member member2 = new Member("member2", 20, teamA);
Member member3 = new Member("member3", 30, teamB);
Member member4 = new Member("member4", 40, teamB);
em.persist(member1);
em.persist(member2);
em.persist(member3);
em.persist(member4);
}
}
Querydsl vs JPQL
@SpringBootTest
@Transactional
public class QuerydslBasicTest {
@PersistenceContext
EntityManager em;
JPAQueryFactory queryFactory;
@BeforeEach
public void before() {
queryFactory = new JPAQueryFactory(em);
//...
}
@Test
public void startJPQL() {
//member1을 찾아라.
String qlString = "select m from Member m " +
"where m.username = :username";
Member findMember = em.createQuery(qlString, Member.class)
.setParameter("username", "member1")
.getSingleResult();
assertThat(findMember.getUsername()).isEqualTo("member1");
}
@Test
void startQuerydsl() {
JPAQueryFactory queryFactory = new JPAQueryFactory(em);
QMember m = new QMember("m");
Member findMember = queryFactory
.select(m)
.from(m)
.where(m.username.eq("member1"))//파라미터 바인딩 처리
.fetchOne();
assertThat(findMember.getUsername()).isEqualTo("member1");
}
}
JPQL에서는 파라미터 바인딩을 했어야 헀는데(.setParameter("username", "member1")
), Querydsl은 파라미터 바인딩을 자동으로 해준다.(("member1")
)
JPQLQueryFactory
를 필드로 제공하면 동시성 문제는 어떻게 될까?
동시성 문제는 JPQLQueryFactory
를 생성할 때 제공하는 EntityManager(em)
에 달려있다.
스프링 프레임워크는 여러 쓰레드에서 동시에 같은 EntityManager
에 접근해도, 트랜잭션 마다 별도의 영속성 컨텍스트를 제공하기 때문에, 동시성 문제는 걱정하지 않아도 된다.
인프런 김영한 지식공유자님 강의 : 실전! Querydsl
728x90
'BE > JPA' 카테고리의 다른 글
Querydsl - 검색 조건 쿼리 (0) | 2022.09.16 |
---|---|
Querydsl - 기본 Q-Type 활용 (0) | 2022.09.15 |
Querydsl - 설정, 예제 도메인 모델 (0) | 2022.09.15 |
스프링 데이터 JPA - 네이티브 쿼리 (0) | 2022.09.14 |
스프링 데이터 JPA - Projections (0) | 2022.09.14 |
Comments