모아이티

[게시판 만들기] 코드로 배우는 스프링 웹 프로젝트 Part3 - Day2 테스트코드 작성 & 게시물 조회/수정/삭제 본문

카테고리 없음

[게시판 만들기] 코드로 배우는 스프링 웹 프로젝트 Part3 - Day2 테스트코드 작성 & 게시물 조회/수정/삭제

Yun's kitchen 2021. 3. 18. 23:28

1. BoardVO 클래스와 MapperTest

 

- BoardVO 클래스 설정

게시판 속성을 생각할 때 글번호, 제목, 내용, 작성자 , 현재날짜, 수정날짜 이렇게 데이터를 넣어주고

@Data 어노테이션 사용

package org.joe.domain;

import java.sql.Date;

import lombok.Data;

@Data
public class BoardVO {
	//DataType은 대문자로 설정해야 한다. 소문자로 잡을시 기본값을 가지기 때문이다
	private Long bno;
	private String title, content, writer;
	private Date regDate, updatedate;
}

- org.joe.mapper 패키지에 BoardMapper 인터페이스 생성

package org.joe.mapper;

import java.util.List;

import org.joe.domain.BoardVO;

public interface BoardMapper {

	List<BoardVO> getList();
}

- src/main/resources 폴더에 패기지 org.joe.mapper 폴더를 디렉토리별로 나눠준다.

org.joe.mapper

<!DOCTYPE mapper
	PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
	"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

BoardMapper.xml에 넣기

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
	PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
	"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
	
<mapper namespace="org.joe.mapper.BoardMapper">
	
	
	<select id="getList" resultType="org.joe.domain.BoardVO">
		select * from tbl_board order by bno desc
	</select>
</mapper>

getList의 쿼리문을 작성한다. 모든 정보를 불러오는 getList로 지어주고 resultType은 BoardVO의 모든 정보니까 

패키지명과 클래스명을 같이 입력

 

제대로 설정됬는지 TimeMapperTests를 테스트 후에 BoardMapperTests 클래스 생성

 

package org.joe.mapper;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import lombok.extern.log4j.Log4j;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/root-context.xml")
@Log4j
public class BoardMapperTests {
	
	@Autowired
	private BoardMapper boardMapper;
	
	
	@Test
	public void getList() {
		log.info("-------------");
		boardMapper.getList();
	}
}

BaordMapper를 @Autowired로 주입시키고 간다한가 @Test 어노테이션을 사용해 

getList() 메소드를 불러온다.

 

결과값

invalid bound statament 에러

굉장히 흔한 에러로 쿼리문 작성시 아이디를 잘못 적을 경우 나타나는 현상


2. insert / selectKey

insert

BoardMapper interface에 void이고 파라미터 값을 BoardVO를 받는 insert메소드 생성

boardMapper.xml에 insert 쿼리 작성

@Test
	public void insert() {
		BoardVO vo = new BoardVO();
		vo.setTitle("insert 테스트다");
		vo.setContent("테스트란 말이다");
		vo.setWriter("주인님");
		
		boardMapper.insert(vo);
	}

insert 메서드에 BoardVO 객체 생성 후에 title, content, writer에 값을 set 해주고

insert 메서드에 vo 객체를 담아서 insert()실행

 

insertSelectKey

void 타입의 파라미터를 BoardVO를 받는 insertSelectKey 메서드 생성

 

	<insert id="insertSelectKey">
		<selectKey order="BEFORE" keyProperty="bno" resultType="long">
			select seq_board.nextval from dual
		</selectKey>
	
		insert into tbl_board (bno, title, content, writer) 
		values (#{bno}, #{title}, #{content}, #{writer})
	</insert>

insert 쿼리 작성시 insert문을 그대로 쓰대 <selectKey> 속성을 사용하는데 글번호를 key로 잡을테니

keyproperty는 bno로 입력하고 bno 타입을 long으로 설정했으니 resultType에 long 설정


3. 게시물 조회 / 수정 / 삭제

BoardMapper.java -> BoardMapper.xml -> BoardMapperTests.java 순으로 테스트작성

 

조회

BoardVO 타입이고 파라미터 bno 값을 받는 read 메서드 생성

 

<select id="read" resultType="org.joe.domain.BoardVO">
		select * from tbl_board where bno = #{bno}
</select>

resultType은 패키지명과 클래스명 그대로

BoardVO 타입이고 boardMapper의 read 메서드를 불러오는데 2번 글을 불러 오기로 했다.

결과

삭제

삭제는 글번호만 있어도 되니까 파라미터를 bno만 받는다.

 

<delete id="delete">
	delete from tbl_board where bno = #{bno}
</delete>

조건을 글번호로 하는 쿼리문을 작성

 

22번의 글을 삭제해본다.

수정

수정은 모든 내용을 수정해야하니 파라미터값을 BoardVO 전체 값을 받는다.

 

	<update id="update">
		update tbl_board
		set title = #{title},
		content = #{content},
		writer = #{writer},
		updatedate = sysdate
		where bno = #{bno}
	</update>

update 쿼리문 작성시 콤마와 #{} 신경써서 작성.

updatedate는 수정날짜로서 sysdate를 사용하여 현재날짜로 수정되게 한다.

BoardVO 객체를 생성 후 각각의 값들을 수정 후 출력

 

결과

Comments