2016년 8월 12일 금요일

(방학특강)JPA,QueryDSL4.X강좌 – 프로젝션(Projection)과 결과반환(예문에서 JPA__EXPRESSION_… - 스프링실무교육학원

(방학특강)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)); 
}

댓글 없음:

댓글 쓰기