TDD / Mybatis - 게시글 목록 조회
BoardService 파일 생성
- 이제 게시판 구현 시작~~
- 패키지는 package com.kh.mbatis.board.model.service;
public class BoardService {
// ...
}
BoardServiceTest 파일 생성
- 클래스명에 커서 올려놓고 Ctrl + 1 키 눌러서 생성
- test 폴더 밑에 생성되었는지 확인하기
- 테스트 가능 환경인지 확인하기
- nothing() 메서드 사용
- 테스트 하려는 객체 생성
- 각 테스트 메서드 실행 전 새로운 service 객체를 생성하도록 설정
- 만약 여기서 실패 됐다면(값이 초기화 실패) Null이 뜨기 때문에 검증코드(assertThat) 통과 불가
- service 객체가 잘 생성되었는지 확인
@DisplayName("게시판 테스트") // 1. test 이름도 정해주고
class BoardServiceTest {
// 4. 테스트하려는 객체 생성 후 잘 되는지 확인
private BoardService service; // 만들어두기만 하면 JVM이 자동으로 null로 초기화 시켜줌
// 5. 테스트 실행할 때마다 새로운 service 객체 생성
@BeforeEach // 아래의 테스트 메서드들을 실행할 전에 실행하도록 설정
public void setUp() throuws Exception {
service = new BoardService();
}
// 2. 테스트 가능 환경인지도 확인하기
@Test
@Disabled // 3. 확인 되었으면 다음 테스트부터는 실행되지 않게 설정해주기
pucblic void nothing() {
}
// 6. service 객체가 잘 생성되었는지 확인
@Test
@Disabled // 테스트가 잘 되었으면 여기도 다음부터는 실행되지 않게 설정해주기
pulic void create() {
assertThat(service).isNotNull();
}
}
TDD 이제 조금 이해된 거 같아….. 재밌네.
test 코드 작성
@Test
public void findAllTest() {
// Board 타입의 List 생성
List<Board> list = null;
// service에 요청
list = service.findAll();
// 객체 생성 후에는 값이 없어도 빈 리스트를 반환하기 때문에 null이 아닐 것이라고 예상
assertThat(list).isNotNull();
}
Board 객체 생성
package com.kh.mbatis.board.model.vo;
// import 생략
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Board {
private int no;
private int rowNum;
private int writerNo;
private String writerId;
private String title;
private String content;
private String type;
private String originalFileName;
private String renamedFileName;
private int readCount;
private String status;
// 댓글 구현 시 추가 예정
// private List<Reply> replies;
private Date createDate;
private Date modifyDate;
}
service 코드 작성
- findAll() 메서드 생성
public class BoardService {
public List<Board> findAll() {
// return null; // null을 리턴하기 때문에 실패
// 리스트를 반환하도록 작성
return new ArrayList<>(); // null이 아니기 때문에 테스트 통과
}
}
테스트 돌려보기.
-
테스트 후 service 구현
public class BoardService {
// dao 생성
private BoardDao dao = new BoardDao();
public List<Board> findAll() {
List<Board> list = null // null로 초기화
SqlSession session = getSession(); // SqlSessionTemplate import. session 객체 얻어 오기
// dao에 DB 접근해서 데이터 달라고 요청
// 받으면 list에 담기
list = dao.findAll(session);
session.close();
return list; // list 반환
}
}
BoardServiceDao 파일 생성
public class BoardDao {
public List<Board> findAll(session) {
// return null; // null을 반환하면 테스트 실패
// ArrayList 반환하도록 작성 : 일단 테스트 통과
return new ArrayList<>();
}
}
-
쿼리문 실행하도록 작성
public class BoardDao {
public List<Board> findAll(session) {
// boardMapper : boardMapper
// selectAll : 쿼리문의 id
// map : 리턴값의 타입
return session.selectList("boardMapper.selectAll";
}
}
board-mapper.xml 생성
- mapper 설정 파일 선언
- namespace 지정
- boardMapper
- resultMap 생성
- Board 객체의 필드명과 DB의 컬럼명 매칭
- 쿼리문 작성
<?xml version="1.0" encoding="UTF-8"?>
<!-- Mapper 설정 파일 선언 -->
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace 지정 -->
<mapper namespace="boardMapper">
<resultMap type="Board" id="boardListResultMap">
<id property="no" column="NO" />
<result property="no" column="NO" />
<result property="title" column="TITLE" />
<result property="writerId" column="ID" />
<result property="readCount" column="READCOUNT" />
<result property="type" column="TYPE" />
<result property="originalFileName" column="ORIGINAL_FILENAME" />
<result property="renamedFileName" column="RENAMED_FILENAME" />
<result property="content" column="CONTENT" />
<result property="createDate" column="CREATE_DATE" />
<result property="modifyDate" column="MODIFY_DATE" />
</resultMap>
<!-- resultMap 작성 전 : <select id="selectAll" resultMap="com.kh.mbatis.board.model.vo.Board"> -->
<select id="selectAll" resultMap="boardListResultMap">
SELECT B.NO,
B.TITLE,
M.ID,
B.READCOUNT,
B.ORIGINAL_FILENAME,
B.RENAMED_FILENAME,
B.CONTENT,
B.CREATE_DATE,
B.MODIFY_DATE
FROM BOARD B
JOIN MEMBER M ON(B.WRITER_NO = M.NO)
WHERE B.STATUS = 'Y'
</select>
</mapper>
mapper 등록
- mybatis-config.xml에 작성
- 등록까지 해줘야 DB 연결 가능
<mappers>
<mapper resource="mappers/member/member-mapper.xml"/>
<mapper resource="mappers/board/board-mapper.xml"/>
</mappers>
console에 찍어보기
@Test
public void findAllTest() {
List<Board> list = null;
list = service.findAll();
// 테스트는 통과했지만 찍어보고 싶어서 test에서 syso 찍어보기
System.out.println(lsit);
assertThat(list).isNotNull();
}
list 잘 가져온다.. 이게 뭔가 더 확실한 느낌이 드는데. 난 쪼렙이니까.