Spring Boot
association(1:1관계)
머리방울
2022. 9. 21. 17:10
현재 EmpVO(사원정보), DeptVO(부서정보)를 담고 있는 VO 두개가 있다.
EmpVO(사원정보)에는 DeptVO의 PK인 deptNum(부서번호)가 FK로 걸려 있다.
empMapper에서 사원정보와 부서정보를 포함한 사원 목록을
불러오고자 쿼리를 작성할 때 두가지 방법이 있다.
1. association을 이용하기
사원을 기준으로 봤을 때 사원은 하나의 부서에 소속되어 있다.
association은 1:1 관계일 때 사용한다.
2. collection 이용하기
collection은 1:N 기준으로 부서 기준으로 봤을 때 사원이
여러명 소속되어 있다.
실무에서는 외래키(FK)로 걸려 있는 테이블 기준으로 둘 중 무엇을 쓸 것인지 판단한다고 한다.
현재 사원정보에 deptNum(부서번호)이 FK로 걸려 있기 때문에
1:1 관계 association으로 처리하겠다.
1. resultMap 작성하기
<mapper namespace="empMapper">
<resultMap type="kh.study.emp.emp.vo.EmpVO" id="emp">
<id column="EMP_NUM" property="empNum"/>
<result column="EMP_NAME" property="empName"/>
<result column="POSITION" property="position"/>
<result column="EMP_AGE" property="empAge"/>
<result column="GENDER" property="gender"/>
<result column="EMP_TELL" property="empTell"/>
<association property="deptInfo" resultMap="deptMapper.dept"/>
</resultMap>
기본형태
<association property="" resultMap=""/>
property="" -> 내가 empVO에서 association을 무엇이라고 부를 것인지
resultMap -> resultMap의 이름을 지정한다
나는 empVO와 deptVO mapper를 각 파일로 분리하였다.
내가 이미 deptVO로 만든 resultMap을 불러오기 위해서는
deptMapper의 namespace이름 + . + 지정할 이름을 작성하면 된다.
즉. resultMap="deptMapper.dept"
2. empVO
@Getter
@Setter
@ToString
public class EmpVO {
private String empNum ;
private String empName ;
private String position;
private int empAge ;
private String empTell;
private String gender ;
private String deptNum ;
association 객체
private DepartmentVO deptInfo;
3. html 적용
<th:block th:each="list, status :${empList}">
<tr>
<th scope="col" th:text="${status.count}"></th>
<td th:text="${list.empName}"></td>
<td th:text="${list.empTell}"></td>
<td th:text="${list.gender}"></td>
<td th:text="${list.empAge}"></td>
<td th:text="${list.deptInfo.getDeptName()}"></td>
<td th:text="${list.deptInfo.getLocal()}"></td>
</tr>
</th:block>
즉, empVO.getDeptInfo().getDeptName(); 이렇게 자료 빼낸다 .
list.deptInfo.local 이렇게 작성하면 getter가 실행된다.
테이블이 3개 이상일 때는 view를 사용하는 것도 적절한 방법이다.
카테고리 상품정보
카테고리 기준 카테고리 1 : N 상품 -> collection 사용
상품정보 1 : N 상품이미지 -> collection 사용