스프링 기초(인강 보충)_3

bitna's study note·2022년 7월 8일

스프링

목록 보기
13/54

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();
	}
}
profile
좋은개발자가 되기위한 삽질기록 노트

0개의 댓글