본문 바로가기
🎯 etc/Query

[ QueryDSL ] Spring Boot + Querydsl (1)

by 깸뽀 2022. 11. 24.
728x90

📌 스프링 부트 + 스프링 데이터 JPA의 한계점

      ➥ 복잡한쿼리, 동적쿼리를 해결하지 못한다

 

📌 Querydsl

- 자바언어의 한계를 넘어서 쿼리를 자바 코드로 작성하여 문법 오류를 컴파일 시점에 잡을 수 있다

- 동적 쿼리 문제를 해결할 수 있다

- 쉬운 SQL 스타일의 문법이라 복잡한 쿼리도 쉽게 작성할 수 있다

 

💻 예시 ( JPQL vs Querydsl)

@Test
public void jpal() {
	String username = "kim";
    String query = "select m from Member m" + //error
    	  	   "where m.username = :username";
    List<Member> result = em.createQuery(query, Member.class)
    		.getResultList();
}

- 런타임을 실행해 봐야지 에러사항을 알 수 있다

- 문법오류를 찾기 힘들다

- error ➱ "select m from Member m " : m뒤에 공백 필요

 

@Test
public void querydsl() {
	String username = "kim";
    List<Member> result = queryFactory
    	.select(member)
        .from(member)
        .where(member.username.eq(username))
        .fetch();
}

- 쿼리를 자바코드로 작성하기 때문에 띄어쓰기나 문법오류가 없다

- 자바 컴파일러가 오류를 잡아주기 때문에 런타임을 실행하기 전에 에러를 잡을 수 있다

- 자바코드기 때문에 자동완성의 도움을 받을 수 있다

 

@Test
public void querydsl() {
	String username = "kim";
    List<Member> result = queryFactory
    	.select(member)
        .from(member)
        .where(usernameEq(username))
        .fetch();
}

private BooleanExpression usernameEq(String username) {
	return member.username.eq(username);
}

+) 메서드를 뽑을 수 있기때문에 다른 곳에서도 재사용이 가능하다

 

 

 

스프링 데이터 JPA + Querydsl

- 단순 반복작업의 코드들이 확연히 줄어들고 개발자는 핵심 비지니스로직을 개발하는데 집중 할 수 있다

- 쿼리를 작성하는 것을 자바코드로 하기때문에 더 즐겁게 할 수 있다

728x90

'🎯 etc > Query' 카테고리의 다른 글

[ Oracle ] 반경 내 위도 경도 쿼리 SQL  (0) 2022.11.21

댓글