@Generated("com.querydsl.codegen.DefaultEntitySerializer")
public class QMember extends EntityPathBase<Member> {
private static final long serialVersionUID = -769675599L;
private static final PathInits INITS = PathInits.DIRECT2;
public static final QMember member = new QMember("member1");
....
먼저 Q타입 사용법은
QMember m = QMember.member;
QMember m = new QMember("m") //별칭은 무조건 줘야 함.
대충 저렇게 2가지 방법이 있는데, 당연히 위에걸 선호
@Test
public void startQuerydsl(){
QMember m = QMember.member;
String usernameForFind = "member1";
Member result = query.select(m)
.from(m)
.where(m.username.eq(usernameForFind))
.fetchOne();
assertThat(result.getUsername()).isEqualTo(usernameForFind);
}
근데 여기서 저 QMember를 static import 하면 그냥 member로 쓸 수 있음.
@Test
public void startQuerydsl(){
String usernameForFind = "member1";
Member result = query.select(member)
.from(member)
.where(member.username.eq(usernameForFind))
.fetchOne();
assertThat(result.getUsername()).isEqualTo(usernameForFind);
}
이거를 권장한다고 함.
근데 나는 개인적으로 저렇게 QMember 해 놓는게 훨씬 명시적이라 더 좋긴 함.
그리고 new 해서 새로 만들어서 쓸 때는 무조건 별칭 명시해 주라고 했는데
@Generated("com.querydsl.codegen.DefaultEntitySerializer")
public class QMember extends EntityPathBase<Member> {
private static final long serialVersionUID = -769675599L;
private static final PathInits INITS = PathInits.DIRECT2;
public static final QMember member = new QMember("member1");
......
보면 저렇게 static으로 쓰라고 된 member도 별칭이 저렇게 되어 있음.
그리고, 하다보면 같은 테이블을 join해서 가져와야 할 때가 있는데,
그 때 new 해서 새로운 별칭 주면서 사용하면 됨.
나는 이거 필드로 넣을 듯? 그냥 명시적으로 짧게 m 같은걸로 해서 넣어놓을 듯.
저 별칭은 JPQL 만들 때 사용할 별칭임.
jpql 나가는 쿼리도 보고 싶으면,
spring:
datasource:
url: jdbc:h2:tcp://localhost/./querydsl
username: sa
password: 1234
driver-class-name: org.h2.Driver
jpa:
hibernate:
ddl-auto: create
properties:
hibernate:
format_sql: true
use_sql_comments: true
logging:
level:
org.hibernate.SQL: debug
spring.jpa.properties.hibernate.use_sql_comments를 true로 하면 된다.
그럼
/* select
member1
from
Member member1
where
member1.username = ?1
and member1.age = ?2 */ select
m1_0.member_id,
m1_0.age,
m1_0.team_id,
m1_0.username
from
member m1_0
where
m1_0.username=?
and m1_0.age=?
여기 나가는 쿼리 보여주는 거 앞에 주석으로 JPQL도 보여줌.
member1은 QueryDSL로 빌드한 QMember의
@Generated("com.querydsl.codegen.DefaultEntitySerializer")
public class QMember extends EntityPathBase<Member> {
private static final long serialVersionUID = -769675599L;
private static final PathInits INITS = PathInits.DIRECT2;
public static final QMember member = new QMember("member1");
.......
QueryDSL이 알아서 지은거임. 뭐 소문자로 엔티티명+숫자 이런 식인듯.
'스프링데이터 + JPA > QueryDSL' 카테고리의 다른 글
10. 결과 조회 (0) | 2023.11.28 |
---|---|
9. 검색 조건 쿼리 (0) | 2023.11.28 |
7. JPQL vs QueryDSL (0) | 2023.11.28 |
6. 예제 도메인 모델 (0) | 2023.11.28 |
5. H2 DB 설치 및 설정 (0) | 2023.11.27 |