본문 바로가기
☕Java/Spring

[20210712] Spring + MyBatis를 이용한 게시판 2 - DTO, DAO, Controller

by 캔 2021. 7. 12.

DTO(Data Transfer Object): 데이터 전송을 위해 사용하는 객체. 데이터 전송 및 검증 횟수를 줄이기 위해 자료들을 하나하나 호출하는 것이 아닌 클래스를 만들어 한 번에 전송할 수 있게 해 준다. 각 데이터 변수들과 그 변수들을 꺼내거나 설정할 수 있는 getter와 setter로 구성되어 있다. Spring에서는 사실상 DTO를 빈(Bean), 포조(POJO)와 같다고 볼 수 있으며 혼용이 가능하다.(이 용어들의 차이는 나중에 다뤄보겠다.)

package newProject.dto;

public class BoardDTO {
	
	private int brdno;
	private String brdtitle;
	private String brdwriter;
	private String brdmemo;
	private String brddate;
	
	public BoardDTO() {
		super();
	}
	
	public BoardDTO(int brdno, String brdtitle, String brdwriter, String brdmemo, String brddate) {
		super();
		this.brdno = brdno;
		this.brdtitle = brdtitle;
		this.brdwriter = brdwriter;
		this.brdmemo = brdmemo;
		this.brddate = brddate;
	}

	public int getBrdno() {
		return brdno;
	}

	public void setBrdno(int brdno) {
		this.brdno = brdno;
	}

	public String getBrdtitle() {
		return brdtitle;
	}

	public void setBrdtitle(String brdtitle) {
		this.brdtitle = brdtitle;
	}

	public String getBrdwriter() {
		return brdwriter;
	}

	public void setBrdwriter(String brdwriter) {
		this.brdwriter = brdwriter;
	}

	public String getBrdmemo() {
		return brdmemo;
	}

	public void setBrdmemo(String brdmemo) {
		this.brdmemo = brdmemo;
	}

	public String getBrddate() {
		return brddate;
	}

	public void setBrddate(String brddate) {
		this.brddate = brddate;
	}
}

DAO(Data Access Object): 데이터베이스에 접근하기 위해 사용하는 객체. 데이터베이스에 대한 CRUD(Create, Read, Update, Delete) 작업과 관련된 메서드들을 담고 있다.

package newProject.dao;

import java.util.List;

import org.apache.ibatis.session.SqlSession;

import newProject.dto.BoardDTO;

public class BoardDao implements DAO{
	
	SqlSession ss;
	
	public void setSs(SqlSession ss) {
		this.ss = ss;
	}

	@Override
	public List<BoardDTO> selectAll() {
		return ss.selectList("selectAll");
	}

	@Override
	public BoardDTO selectOne(int no) {
		return ss.selectOne("selectOne", no);
	}

	@Override
	public void insertOne(BoardDTO dto) {
		ss.insert("insertOne", dto);
	}

	@Override
	public void updateOne(BoardDTO dto) {
		ss.update("updateOne", dto);
	}

	@Override
	public void deleteOne(int no) {
		ss.delete("deleteOne", no);
	}

}

컨트롤러: MVC 모델의 C(Controller)에 해당한다. 사용자의 요청을 수행하기 위해 모델을 조작하고 그 결과를 뷰로 전달하는 역할을 한다.

package newProject.control;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
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 newProject.dao.DAO;
import newProject.dto.BoardDTO;

@Controller
public class BoardController {

	@Autowired
	DAO dao;
	
	public void setDao(DAO dao) {
		this.dao = dao;
	}

	@RequestMapping("/boardList")
	public String boardList(Model model) {
		List<BoardDTO> list = dao.selectAll();
		model.addAttribute("list", list);
		return "boardList";
	}
	
	@RequestMapping("/boardView")
	public String boardView(Model model, int brdno) {
		model.addAttribute("data", dao.selectOne(brdno));
		return "boardView";
	}
	
	@RequestMapping("/boardInsert")
	public String boardInsert() {
		return "boardInsert";
	}
	
	@RequestMapping("/insertOk")
	public String boardInsert2(@ModelAttribute BoardDTO dto) {
		dao.insertOne(dto);
		return "redirect:/boardList";
	}
	
	@RequestMapping("/boardUpdate")
	public String boardUpdate(Model model, int brdno) {
		model.addAttribute("data", dao.selectOne(brdno));
		return "boardUpdate";
	}
	
	@RequestMapping("/updateOk")
	public String boardUpdate2(@ModelAttribute BoardDTO dto) {
		dao.updateOne(dto);
		return "redirect:/boardList";
	}
		
	@RequestMapping(value="/boardDelete", method=RequestMethod.GET)
	public String boardDelete(@RequestParam int brdno) {
		dao.deleteOne(brdno);
		return "redirect:/boardList";
	}
}