Q클래스
- Querydsl을 사용할 때, **엔티티 클래스(Entity)**를 기반으로 동적으로 쿼리를 작성할 수 있도록 Querydsl이 자동으로 생성한 클래스
- 이러한 클래스들은
Q
접두사를 붙여서 엔티티 이름과 매핑됨.
@Entity
public class Member {
private Long id;
private String name;
private String email;
}
이런 엔티티 클래스가 있다면 Querydsl은 이를 기반으로
QMember라는 클래스를 생성
QMember
의 내부 구조
QMember
는 Querydsl이 생성한 정적 메타 모델 클래스
이 클래스는 엔티티의 필드들을 타입 안전한 쿼리 작성에 사용할 수 있도록 제공함
public class QMember extends EntityPathBase<Member> {
public static final QMember member = new QMember("member");
public final StringPath name = createString("name");
public final StringPath email = createString("email");
public final NumberPath<Long> id = createNumber("id", Long.class);
public QMember(String variable) {
super(Member.class, forVariable(variable));
}
}
QMember.member:
QMember의 정적 변수로, 쿼리 작성 시 객체로 사용됨.
StringPath, NumberPath:
각 엔티티 필드(name, email, id)를 타입 안전하게 참조하기 위한 필드임.
Q클래스의 주요 이점
- 타입 안전성:
- SQL을 문자열로 작성하지 않아 런타임 에러를 줄이고, 컴파일 타임에 쿼리 검증이 가능하다.
- 가독성 향상:
- 동적 쿼리 작성:
- 조건에 따라 쿼리를 동적으로 생성할 수 있다.
애노테이션
1. Spring 관련 애노테이션
@Controller
:
- Spring MVC에서 컨트롤러 역할을 하는 클래스에 붙임.
- 브라우저 요청을 처리하고, 결과를 반환.
@RestController
:
@Controller
+ @ResponseBody
조합.
- JSON 또는 XML 형태의 데이터를 반환.
- @ResponseBody는 컨트롤러 메서드의 반환값을 HTTP 응답 본문에 포함시킴.
JSON, XML, 텍스트 데이터를 반환할 때 사용.
@RestController를 사용하면 모든 메서드에 @ResponseBody 생략가능
RESTful API, AJAX 응답 등에서 자주 활용됨
@Service
:
- 비즈니스 로직을 수행하는 서비스 클래스에 붙임.
- 계층 구조에서 서비스 역할을 하는 클래스 표시.