7월 8일
게시판 만들기


JSP& 서블릿 작업을 할때는 DAO 라는 DB처리하는 코드가 있는 클래스임,
MyBatis같은 경우 Mapper인터페이스로 활용한다.
VO와 DTO는 Presentation/Business/Persistence 각 계층간에 데이터를 주고받을때 쓰는 객체인데,핵심객체가 아니기 때문에 스프링에서 빈으로 등록해서 작업하지 않음
1.초기 세팅
(1)라이브러리 세팅(pom.xml)
아래링크에 정리해둠
https://velog.io/@cbn1218/%EC%A3%BC%EB%A7%90%EB%B3%B5%EC%8A%B5-2
(2)DB Connection 관련 세팅(root-context.xml)
https://velog.io/@cbn1218/%EC%A3%BC%EB%A7%90%EB%B3%B5%EC%8A%B5-2
(3)log4j.xml test 관련 설정
https://velog.io/@cbn1218/%EC%A3%BC%EB%A7%90%EB%B3%B5%EC%8A%B5-2
(4)초기세팅 테스트
src>main>java 패키지 만들기
package com.keduit.mapper;
import org.apache.ibatis.annotations.Select;
public interface TimeMapper {
@Select("select sysdate from dual")
String getTime();
}
src>test>java 패키지 만들기
Junit으로 테스트 하기
package com.keduit.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 com.keduit.mapper.TimeMapperTest;
import lombok.extern.log4j.Log4j;
@RunWith(SpringJUnit4ClassRunner.class)//이 클래스로 잘돌아가는지 test해볼꺼야
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/root-context.xml")//참고할 경로는 여기야
@Log4j //화면에 뿌려주는건 Log4j가 관리 할거야
public class TimeMapperTest {
@Autowired
private TimeMapper timeMapper;
@Test
public void testTime1() {
log.info("testTime1............");
log.info(timeMapper.getTime());
}
}
2.테이블 만들기
CREATE SEQUENCE seq_board;
CREATE TABLE t_board(
bno NUMBER(10,0),
title VARCHAR2(200) not null,
content VARCHAR2(2000) not null,
writer VARCHAR2(50) not null,
regdate date DEFAULT sysdate,
updatedate date DEFAULT sysdate
);
alter table t_board add CONSTRAINT pk_bpard PRIMARY key(bno);
INSERT INTO t_board(bno,title,content,writer) VALUES(seq_board.nextval,'테스트제목','테스트내용','user00');
INSERT INTO t_board(bno,title,content,writer) VALUES(seq_board.nextval,'테스트제목01','테스트내용01','user01');
INSERT INTO t_board(bno,title,content,writer) VALUES(seq_board.nextval,'테스트제목02','테스트내용02','user02');
INSERT INTO t_board(bno,title,content,writer) VALUES(seq_board.nextval,'테스트제목03','테스트내용03','user03');
INSERT INTO t_board(bno,title,content,writer) VALUES(seq_board.nextval,'테스트제목04','테스트내용04','user04');
commit;
3.영속계층 만들기
-테이블을 반영하는 VO(Value Object)클래스처리
-MyBatis를 이용한 Mapper인터페이스의 작성 및 xml처리
-작성한 Mapper 인터페이스의 테스트
(1)VO(Value Object)클래스 만들기
package com.keduit.domain;
import java.util.Date;
import lombok.Data;
@Data //lombok을 사용하여 getter,setter,toString,생성자등이 만들어진다.
public class BoardVO {
//데이터베이스 작업을 할때는 기본적으로 대문자를 쓴다. 소문자로 설정시 0과 같은 기본값을 갖기 때문이다.
private Long bno;
private String title;
private String content;
private String writer;
private Date regdate;
private Date updatedate;
}
(2)Mapper 인터페이스 작성하기
package com.keduit.mapper;
import java.util.List;
import com.keduit.domain.BoardVO;
public interface BoardMapper {
List<BoardVO> getList();
}
(3)Mapper.xml만들기
src>main>resources 에서 com->keduit->mapper 로 폴더를 만든다.
헷갈릴수 있으니 인터페이스와 동일하게 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">
<!--dtd라는건 xml문서가 어떻게 구성되는지,어떤 태그들을 몇번 쓸수 있게했는지 알수있는 문서이다.xml 태그들을 지원한다.-->
<mapper namespace="com.keduit.mapper.BoardMapper">
<!-- select이라는 태그를 쓰면 result를 어떻게 처리할껀지 고민해봐야함. 보통 resultMap,resultType을 많이 쓴다.
resultType은 VO,DTO등의 객체를 담을 수 있는 클래스의경로를 명시하고 사용하면됨, resultMap은 개발자가 직접 POJO클래스에 매핑-->
<select id="getList" resultType="com.keduit.domain.BoardVO">
select* from t_board order by bno desc
</select>
</mapper>
(4)Mapper Test 하기
BoardMapper 인터페이스 의 풀네임("com.keduit.mapper.BoardMapper")과
BoardMapper.xml에 정의된 id가 맞아야함
test가 성공했다면 DB불러오는게 성공한거임
package com.keduit.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)//이 클래스로 잘돌아가는지 test해볼꺼야
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/root-context.xml")//참고할 경로는 여기야
@Log4j //화면에 뿌려주는건 Log4j가 관리 할거야
public class BoardMapperTest {
@Autowired
private BoardMapper boardMapper;
@Test
public void testGetList() {
log.info("testGetList..............");
boardMapper.getList();
}
}