[6회차 02]
BoardDao
이전 코드
class BoardRowMapper implements RowMapper<BoardDto>{
@Override
public BoardDto mapRow(ResultSet rs, int rowNum) throws SQLException {
BoardDto boardDto = null;
while(rs.next()) {
boardDto = new BoardDto();
boardDto.setBoardSeq(rs.getInt("board_seq"));
boardDto.setBoardTypeSeq(rs.getInt("board_type_seq"));
boardDto.setTitle(rs.getString("title"));
boardDto.setContent(rs.getString("content"));
boardDto.setDelYn(rs.getString("del_yn"));
boardDto.setHit(rs.getInt("hit"));
boardDto.setRegDtm(rs.getString("reg_dtm"));
boardDto.setRegMemberSeq(rs.getInt("reg_member_seq"));
boardDto.setUpdateDtm(rs.getString("update_dtm"));
boardDto.setUpdateMemberSeq(rs.getInt("update_member_seq"));
boardDto.setBoardTypeNm(rs.getString("board_type_nm"));
}
return boardDto;
}
}
수정 코드
전에 작성한 BoardRowMapper
클래스는 RowMapper
인터페이스를 구현했는데요 단일 행 객체로 맵핑하는데 사용됩니다 하지만 저희는 게시물 리스트를 가져오기위해 새로운 클래스를 만들어 보겠습니다
class BoardListMapper implements ResultSetExtractor<List<BoardDto>>{
@Override
public List<BoardDto> extractData(ResultSet rs) throws SQLException, DataAccessException {
ArrayList<BoardDto> list = new ArrayList<>();
BoardDto boardDto = null;
while(rs.next()) {
boardDto = new BoardDto();
boardDto.setBoardSeq(rs.getInt("board_seq"));
boardDto.setBoardTypeSeq(rs.getInt("board_type_seq"));
boardDto.setTitle(rs.getString("title"));
boardDto.setContent(rs.getString("content"));
boardDto.setDelYn(rs.getString("del_yn"));
boardDto.setHit(rs.getInt("hit"));
boardDto.setRegDtm(rs.getString("reg_dtm"));
boardDto.setRegMemberSeq(rs.getInt("reg_member_seq"));
boardDto.setUpdateDtm(rs.getString("update_dtm"));
boardDto.setUpdateMemberSeq(rs.getInt("update_member_seq"));
boardDto.setBoardTypeNm(rs.getString("board_type_nm"));
list.add(boardDto);
}
return list;
}
}
먼저 클래스 이름은 BoardListMapper
라하고 객체를 리스트로 맵핑해야하기에 ResultSetExtractor
인터페이스로 구현합니다
extractData
메서드는ResultSet
에서 모든 행을 가져와서 각 행을 객체로 맵핑하여 리스트에 추가합니다
(모든 행을 가져오기에 전처럼int rowNum
으로 행을 따로 지정해주지 않아도 됩니다)BoardDto
객체를 담을ArrayList
를 만들어줍니다- 새로운
BoardDto
객체를 생성 while(rs.next())
:ResultSet
에 다음 레코더가 있을때까지 반복합니다ResultSet
으로부터 각 열의 값을 가져와boardDto
객체의 각 필드에set
합니다- while문으로 돌린 값을
boardDto
객체로 변환 후list
에 추가합니다 - 값을 담은
list
를 반환합니다
이제 서버를 돌려 list값을 찍어보면
이렇게 값이 나온걸 확인 할 수 있습니다
list.jsp - 값 출력
<tr>
<td>1</td>
<td>
<a href="<c:url value='/forum/notice/readPage.do'/>">
Payoneer
</a>
</td>
<td>2024.03.23 21:57:13</td>
<td>홍길동</td>
</tr>
<tr>
<td>1</td>
<td>Payoneer</td>
<td>2024.03.23 21:57:13</td>
<td>홍길동</td>
</tr>
<tr>
<td>1</td>
<td>Payoneer</td>
<td>2024.03.23 21:57:13</td>
<td>홍길동</td>
</tr>
<tr>
<td>1</td>
<td>Payoneer</td>
<td>2024.03.23 21:57:13</td>
<td>홍길동</td>
</tr>
<tr>
<td>1</td>
<td>Payoneer</td>
<td>2024.03.23 21:57:13</td>
<td>홍길동</td>
</tr>
지금 위처럼 임시 값이 이렇게 하나씩 다 입력해서 들어가 있는데요
list에 담은 값을 이렇게 다 손으로 넣어 줄 수 없기에 출력할 때는 forEach문을 사용해 하나씩 출력해줍니다
<c:forEach items="${list}" var="i" begin ="0" step="1" varStatus="status">
<tr>
<td>${i.boardSeq}</td>
<td>${i.title}</td>
<td>${i.regDtm}</td>
<td>${i.regMemberSeq}</td>
</tr>
</c:forEach>
forEach문을 사용해 코드가 간결해집니다
간단하게 forEach문을에 들어간 속성설명을 적어보겠습니다
items
: 반복할 항목들의 컬렉션을 지정(컬렉션은 배열이나 컬렉션 객체)var
: 각 항목을 참조할때 사용할 변수의 이름을 지정begin
: 속성을 반복을 시작할 인덱스 지정(기본값 0)step
: 반복을 진행할 때마다 증가되는 값varStatus
: 현재 반복 상태를 저장할 변수 이름 지정
즉, list값을 i라고 지정하고 0부터 1씩 증가하며 반복되는 코드입니다
실행하면 이렇게 값이 바뀐걸 확인 할 수 있습니다 하지만 지금 작성자가 숫자로 되어있습니다 이걸 id로 바꿔 보겠습니다
BoardDao
public List<BoardDto> getList(){
String sql = "SELECT b.board_seq , b.board_type_seq , b.title , b.content , b.hit , b.del_yn ,b.reg_dtm , "
+ "b.reg_member_seq ,b.update_dtm , b.update_member_seq , bt.board_type_nm , m.member_id "
+ "FROM board b "
+ "JOIN board_type bt ON bt.board_type_seq = b.board_type_seq "
+ "JOIN member m ON m.member_seq = b.reg_member_seq "
+ "WHERE 1 = 1 "
+ "LIMIT 0, 10";
Object[] args = {};
return query(sql, new BoardListMapper(), args);
}
Join으로 member테이블의 member_seq와 reg_member_seq를 연결합니다
join을 했기에 member테이블의 member_id값을 가져옵니다
BoardDto
private String memberId;
public String getMemberId() {
return memberId;
}
public void setMemberId(String memberId) {
this.memberId = memberId;
}
이제 memberId를 추가하고 getter와 setter를 만들어줍니다
BoardDao
boardDto.setMemberId(rs.getString("member_id"));
BoardListMapper에 memberId값도 set해줍니다
list.jsp
이제 ${i.regMemberSeq}
를 ${i.memberId}
로 변경하고 서버를 실행
이제 작성자가 memberId로 바뀐걸 확인 하실 수 있습니다
'공부 > 그룹 스터디' 카테고리의 다른 글
원격 톰캣의 Jasypt 환경변수 설정 (0) | 2024.06.21 |
---|---|
AWS EC2 재생성 및 수동배포 (0) | 2024.06.21 |
[6회차 01] 게시판 리스트 만들기 - DB값 넣기, 의존성 주입 (0) | 2024.05.10 |
[5회차 과제 01] 기존 Dao SQL문 prepared statement 형식으로 변경 (0) | 2024.05.10 |
[5회차 05] Filter - 페이지 접근 처리 (0) | 2024.05.07 |