JPA,QueryDSL4.X강좌 – 프로젝션(Projection)과 결과반환
프로젝션 과 결과반환
조회를 원하는 SELECT의 결과대상 칼럼을 지정하는 것을 프로젝션(Projection)이라 한다.
//단일 칼럼
/* Dept 테이블에서 사원이 한명이라도 존재하는 부서명추출, 서브쿼리 */
public List<String> selectDeptExistsEmp() {
List<String> depts = queryFactory.select(dept.dname).from(dept)
.where(JPAExpressions
.selectFrom(emp)
.where(emp.dept.deptno.eq(dept.deptno)).exists()
)
.fetch();
return depts;
}
// 여러 칼럼의 값을 SELECT 하는 경우
// com.querydsl.core.Tuple을 이용하고, 조회는 get() 메소드를 이용하면 된다.
/* Emp 테이블에서 입력받은 부서원 이름 및 부서명을 추출하는데 Dept 테이블과 조인
부서코드를 안가지는 사원은 추출되지 않는다 */
public List<Tuple> selectEmpEnameDnameJoinDept(Long deptno) {
List<Tuple> emps = queryFactory
.select(emp.ename, dept.dname)
.from(emp)
.innerJoin(emp.dept, dept)
.where(emp.dept.deptno.eq(deptno))
.fetch();
return emps;
}
결과를 받는쪽에서는 다음과 같이 Map을 이용하면 된다.
Map<String, String> m = new HashMap<String, String>();
QEmp emp = QEmp.emp;
List<Tuple> result = empService.selectEnameJobByEmpno(empno);
for (Tuple row : result) {
m.put(row.get(emp.ename), row.get(emp.job));
}
댓글 없음:
댓글 쓰기