<오라클 sql 조인 , 어노테이션 조인 두 가징 방법으로 진행>
-entity -> Dept2
@Entity
@Table(name="TB_DEPT2")
@SequenceGenerator(
name = "SQ_DEPT_GENERATOR"
, sequenceName = "SQ_DEPT"
, initialValue = 1
, allocationSize = 1
)
@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
@DynamicInsert
@DynamicUpdate
public class Dept2 extends BaseTimeEntity {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE
, generator = "SQ_DEPT_GENERATOR"
)
private Integer dno;
private String dname;
private String loc;
}
-sql
-- 조인
--출력시 부서번호(dno), 부서명(dname), 부서위치(loc),
--사원번호(eno), 사원명(ename), 급여(salary) 조회하세요
SELECT D.ENO, E.ENAME , E.SALARY
FROM TB_DEPT D,
TB_EMP E
WHERE D.DNO = E.DNO; -- 공통컬럼 조인

-DeptRepository
@Query(value = "SELECT D.*, E.ENO, E.ENAME, E.SALARY \n" +
"FROM TB_DEPT D,\n" +
" TB_EMP E\n" +
"WHERE D.DNO = E.DNO"
, nativeQuery = true)
List<DeptEmpDto> selectNativeJoin();
}
-DeptGroupDto
public interface DeptGroupDto {
// getSumVar(), getAvgVar(), getMaxVar(), getMinVar()
Integer getSumVar();
Integer getAvgVar();
Integer getMaxVar();
Integer getMinVar();
}
-DeptService
// 4) join
public List<DeptEmpDto> selectNativeJoin() {
List<DeptEmpDto> list
= deptRepository.selectNativeJoin();
return list;
}
-DeptController
// 4) join
@GetMapping("/dept/join")
public String selectNativeJoin(
Model model
) {
List<DeptEmpDto> list
= deptService.selectNativeJoin();
// jsp 전송
model.addAttribute("list", list);
return "exam01/dept/query/dept_join.jsp";
}
}
-jsp
<%--본문 --%>
<div class="container">
<%-- 테이블 반복문--%>
<%-- todo: 테이블 반복문 시작--%>
<table class="table">
<tbody>
<c:forEach var="data" items="${list}">
<tr>
<td>${data.dno}</td>
<td>${data.dname}</td>
<td>${data.loc}</td>
<td>${data.eno}</td>
<td>${data.ename}</td>
<td>${data.salary}</td>
</tr>
</c:forEach>
</tbody>
</table>
<%-- todo: 테이블 반복문 끝--%>
</div>