진이의 Developer Story

(4) Spring+MyBatis 게시판 만들기 - 클래스 작성 본문

Java/Spring

(4) Spring+MyBatis 게시판 만들기 - 클래스 작성

JIN3260 2016. 1. 20. 14:16

(1) BoardVO

package com.sample.board.vo;

import java.sql.Timestamp;

public class BoardVO {
	private int idx;
	private String title;
	private String content;
	private String id;
	private String hit;
	private Timestamp date;
	
	public int getIdx() {
		return idx;
	}
	public void setIdx(int idx) {
		this.idx = idx;
	}
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	public String getContent() {
		return content;
	}
	public void setContent(String content) {
		this.content = content;
	}
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getHit() {
		return hit;
	}
	public void setHit(String hit) {
		this.hit = hit;
	}
	public Timestamp getDate() {
		return date;
	}
	public void setDate(Timestamp date) {
		this.date = date;
	}	
}

게시판에서 어떤게 모여서 구성이 되나요?
게시글 하나하나가 모여서 게시판을 이루게 되지요.

따라서 자바에서 게시글 하나의 오브젝트를 담당할 VO를 생성합니다.
VO(ValueObject)는 이름에서 알수 있듯이 값의 오브젝트인데요,
DB와 1:1 매핑이 될 수 있도록 생성해주어야 합니다.
그렇기 때문에 table의 구조와 똑같이 VO를 생성하였습니다.

VO는 자바빈, POJO CLASS로 만들어지며 변수와 getter/setter만 적어주시면 됩니다.

(2) BoardController

package com.sample.board.controller;

import java.lang.reflect.Method;
import java.util.List;

import javax.annotation.Resource;
import javax.swing.text.html.FormSubmitEvent.MethodType;

import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

import com.sample.board.service.BoardService;
import com.sample.board.vo.BoardVO;


@Controller
public class BoardController {
	
	private Logger logger = Logger.getLogger(BoardController.class);
	
	@Resource(name="boardService")
	private BoardService boardService;
	
	@RequestMapping(value = "/getBoardList.do")
	public ModelAndView getBoardList() {
		List<BoardVO> list = boardService.getBoardList();
		ModelAndView mv = new ModelAndView("list");
		mv.addObject("list", list);
		
		logger.debug("/getBoardList.do");
		
		return mv;
	}
}

클라이언트의 요청을 DispatcherServlet이 받아 처리할 컨트롤러를 찾아 작업을 위임해줍니다.
컨트롤러는 자신에게 들어온 요청을 서비스 객체와 DAO를 통해 비즈니스 로직을 수행하고 로직 수행의 결과 값을 받아 보여줄 VIEW를 선택하고 해당 VIEW에 값을 뿌려주게 됩니다.

현재의 경우 /gerBoardList.do 로 들어오는 요청을 받게 되면, getBoardList() 메소드를 수행하게 됩니다.

여기서는 ModelAndView를 사용하여 사용할 뷰의 화면을 "list"로 정하고 boardService를 통하여 수행된 로직의 결과를 List<BoardVO> 타입의 list 변수에 담아서 ModelAndView 변수인 mv에 변수를 추가합니다.

그리고 ModelAndView를 돌려줌으로써 list.jsp 파일에 DB에서 가져온 모든 Board 테이블의 내용을 출력해주게 됩니다.

(3) BoardService

package com.sample.board.service;

import java.util.List;

import com.sample.board.vo.BoardVO;

public interface BoardService {
	public List<BoardVO> getBoardList();
}

(4) BoardServiceImpl

package com.sample.board.service;

import java.util.List;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import com.sample.board.vo.BoardVO;

@Service("boardService")
public class BoardServiceImpl implements BoardService {
	
	@Resource(name="boardMapper")
	private BoardMapper boardMapper;

	@Override
	public List<BoardVO> getBoardList() {
		// TODO Auto-generated method stub
		return boardMapper.getBoardList();
	}
}

BoardService 인터페이스를 상속한 BoardServiceImpl 클래스를 만들어줍니다.
여기서는 boardMapper를 호출하여 실제 로직을 수행하는 부분입니다.

마지막으로 로직의 순서입니다.
1. Controller에서 클라이언트의 요청을 받으면, Service 객체에게 권리를 위임한다.
2. Service 객체는 다시 Mapper에게 권리를 위임한다.
3. DB에서 얻은 결과값을 Service -> Controller 순으로 되돌려준다.
4. Controller에서는 받은 값을 VIEW와 함께 출력한다.

다음 포스트에서는 JSP 파일을 작성해보겠습니다.

Comments