3 minute read

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 잘 가져온다.. 이게 뭔가 더 확실한 느낌이 드는데. 난 쪼렙이니까.


Categories:

Updated: