JPQL vs Querydsl


@PersistenceContext
EntityManager 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
public void startQuerydsl() {
//member1을 찾아라.
JPAQueryFactory queryFactory = new JPAQueryFactory(em);

QMember m = new QMember("m"); // 별칭 직접 지정
QMember member = Qmember.member; // 기본 인스턴스 사용

Member findMember = queryFactory
										.select(m)
										.from(m)
										.where(m.username.eq("member1")) // 파라미터 바인딩 처리
										.fetchOne();

assertThat(findMember.getUsername()).isEqualTo("member1");
}

검색 조건 쿼리


기본 검색 쿼리

@Test
public void search() {
	Member findMember = queryFactory
											.selectFrom(member)
											.where(member.username.eq("member1")
											.and(member.age.eq(10)))
											.fetchOne();

	assertThat(findMember.getUsername()).isEqualTo("member1");
}

JPQL이 제공하는 모든 검색 조건 제공

member.username.eq("member1") // username = 'member1'
member.username.ne("member1") //username != 'member1'
member.username.eq("member1").not() // username != 'member1'

member.username.isNotNull() //이름이 is not null

member.age.in(10, 20) // age in (10,20)
member.age.notIn(10, 20) // age not in (10, 20)
member.age.between(10,30) //between 10, 30

member.age.goe(30) // age >= 30
member.age.gt(30) // age > 30
member.age.loe(30) // age <= 30
member.age.lt(30) // age < 30

member.username.like("member%") //like 검색
member.username.contains("member") // like ‘%member%’ 검색
member.username.startsWith("member") //like ‘member%’ 검색
...

AND 조건을 파라미터로 처리

@Test
public void searchAndParam() {
List<Member> result1 = queryFactory
											.selectFrom(member)
											.where(member.username.eq("member1"), member.age.eq(10))
											.fetch();

assertThat(result1.size()).isEqualTo(1);
}

결과 조회