JPA_ 조인

김지영·2024년 3월 29일

jpa

목록 보기
18/18

<오라클 sql 조인 , 어노테이션 조인 두 가징 방법으로 진행>

1) 오라클 sql 조인

  • 예제 ) 부서 + 사원 조인해서 출력하세요
    단, 출력시 부서번호, 부서명, 부서위치, 사원번호, 사원명, 급여 조회하기
  1. Dept2

-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>
profile
그냥 졍이라구하자

0개의 댓글