(Day 90) d
join 데이터와 자바 객체
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<resultMap id="BoardMap" type="Board">
<id column="board_no" property="no"/>
<result column="title" property="title"/>
<result column="content" property="content"/>
<result column="created_date" property="createdDate"/>
<result column="file_count" property="fileCount"/>
<result column="category" property="category"/>
<association property="writer" javaType="Member">
<id column="member_no" property="no"/>
<result column="name" property="name"/>
</association>
<collection property="files" ofType="AttachedFile">
<id column="file_no" property="no"/>
<result column="file_path" property="filePath"/>
<result column="board_no" property="boardNo"/>
</collection>
</resultMap>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<select id="findBy" resultMap="BoardMap" parameterType="int">
select
b.board_no,
b.title,
b.content,
b.created_date,
m.member_no,
m.name,
bf.file_no,
bf.file_path
from
boards b inner join members m on b.writer=m.member_no
left outer join board_files bf on b.board_no=bf.board_no
where
b.board_no=#{value}
</select>
89일차에 많은 작업을 했는데, 그 중 하나로 이렇게 매퍼를 만들었다. join을 시켜서 board, member의 데이터를 가져오고 그것들을 객체로 담는다.
여기서 볼 것은, 아래 사진의 부분이다.
Board 객체는 Member 객체를 writer라는 이름의 멤버로 포함하고 있다.
이 그림을 보면 아래와 같은 코드가 연상되어야 한다.
1
2
3
4
5
6
7
8
//vo
...
private Member writer;
public void setWriter(Member writer) {
this.writer = writer;
}
...
1
board.setWriter(model);
특히, 매퍼에서 마이바티스를 위해 작성해둔 부분을 보고 다시 확인할 수 있다.
1
2
3
4
5
6
7
8
9
<association property="writer" javaType="Member">
<id column="member_no" property="no"/>
<result column="name" property="name"/>
</association>
<collection property="files" ofType="AttachedFile">
<id column="file_no" property="no"/>
<result column="file_path" property="filePath"/>
<result column="board_no" property="boardNo"/>
여기서 Member, AttachedFile이라는 클래스의 객체를 만들어서 세터의 아규먼트로 줄 것으로 예상을 할 수 있다.
이런 작업들을 mapper에 정의해두면 MyBatis가 java의 기본 API를 활용하여 처리할 것이다.
시각화 공부
오늘 공부는 코드단을 제외하면 대부분 시각화 자료를 만들면서 공부를 했다. 그 자료를 블로그에 올리는 적합한 방법을 찾아봐야겠다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.