스프링데이터 + JPA/QueryDSL 38

7. JPQL vs QueryDSL

일단 JPQL로 한번 짜보고, 똑같은 걸 QueryDSL로 짜서 비교해 볼거임. @Test public void startJPQL(){ String sql = "select m from Member m where m.username = :username"; Member result = em.createQuery(sql, Member.class) .setParameter("username", "member1") .getSingleResult(); assertThat(result.getUsername()).isEqualTo("member1"); } 뭐 그냥 JPQL이다. select m1_0.member_id, m1_0.age, m1_0.team_id, m1_0.username from member m1_0..

5. H2 DB 설치 및 설정

스프링 부트 h2의 라이브러리의 버전에 맞춰서 H2 설치 db파일 생성 잘 시키고, implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.0' src/main/resources의 application.yml 파일. default는 application.properties 파일인데 사람마다 선호하는 게 다른 가봄. (회사마다 다를거임) 여튼 없을테니, application.properties 지우고 application.yml 만들어 주셈. spring: datasource: url: jdbc:h2:tcp://localhost/./querydsl username: sa password: driver-class-name: org.h2...

3. QueryDSL 설정

일단 Gradle에 설정하고(이게 스프링부트 버전이나, 인텔리제이 버전이나, QueryDSL 버전마다 조금씩 다르다고 함.) https://qwefdg3.tistory.com/647 일단은 현재 스프링 부트 3.0 이상 버전은 저걸로 하면 됨. 쿼리DSL은 엔티티에 대하여 자바코드로 쿼리를 짤 수 있게 해주는 것 이므로, (구조 자체가 엔티티 스캔해서 그 엔티티에 대한 클래스를 엔티티마다 구현체를 만들어 놓음. 그게 QueryDSL 파일 들이고, 그걸로 QueryDSL 하는거임.) 그래서 먼저, 테스트 엔티티를 만듦. @Entity @Getter public class TestEntity { @Id @GeneratedValue private Long id; private String username; }..

2. 프로젝트 생성

지금까지 계속 비슷하게 환경설정을 했는데, QueryDSL은 약-간 다른 점이 있다. 아직까지는 똑같음. queryDSL이 스프링에서 버전 관리는 해주는데, starter에는 없다고 함. 실행해서 종속성 설치 해 주고, @RestController public class TestController { @GetMapping("/") public String test(){ return "hello"; } } 그냥 간단하게 컨트롤러 만들어 줌. @RestController니 따로 html 페이지를 찾는 게 아니라 그냥 글자 반환함. 객체면 json 형태로 알아서 그 resolver가 바꿔서 반환함. (@RestController 쓰면 ViewResolver 대신 httpMessageConverter가 해 줌.)

0. 프리뷰

QueryDSL은 JPQL을 자바 코드로 작성할 수 있게끔 도와주는 오픈소스 라이브러리 JPQL을 자바 코드로 작성하게끔 지원해 주는 건 이것 말고도 여러가지 있긴 한데, 이거는 정말 코드가 직관적이다. JPQL과 거의 유사해서 해석도 쉽다. 쿼리 dsl 쓰려면 우선, 설정을 해 줘야 하는데 이거는 스프링 부트 버전마다 다르다. https://lordofkangs.tistory.com/461 [QueryDSL] QueryDSL 설정하기 ( SpringBoot 2.6이상, SpringBoot 3.x ) QueryDSL 설정은 쉽지않다. 인프런 김영한 강사님의 QueryDSL 강의를 수강하고 있는 학생이라면 QueryDSL 설정에 어려움을 겪고 있을 것이라 예상된다. 아무래도 강사님이 사용하는 버전이 Spr..