Java/Spring

[Spring] 게시판 설계 변경(3Tier)

퓨어맨 2022. 7. 22. 17:13

Presentation Layer

package kr.smhrd.web;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import kr.smhrd.mapper.BoardMapper;
import kr.smhrd.model.BoardVO;
import kr.smhrd.service.BoardService;

@RestController
public class BoardRESTController {
	
	@Autowired
	private BoardService service;
	
	@RequestMapping("/boardListAjax.do")
	public List<BoardVO> boardListAjax(Model model) {
		// @ResponseBody 생략 가능
		
		List<BoardVO> list = service.boardListAjax(model);
		
		return list;
	}
	
	@RequestMapping("/boardInsert.do")
	public void boardInsertAjax(BoardVO vo) {
		service.boardInsertAjax(vo);
	}
	
	@RequestMapping("/boardDelete.do")
	public void boardDeleteAjax(int idx) {
		service.boardDeleteAjax(idx);
	}
	
	@RequestMapping("/boardUpdate.do")
	public void boardUpdateAjax(BoardVO vo) {
		service.boardUpdateAjax(vo);
	}
	
}

 

Business Layer

package kr.smhrd.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import kr.smhrd.mapper.BoardMapper;
import kr.smhrd.model.BoardVO;

@Service
public class BoardService {
	// Business Layer 담당하는 클래스
	// 로직들을 다 가지고 있을 수 있게끔 하는 클래스
	// ex) if문, for문을 활용해서 작업, 받아온 데이터들을 다른 형태로 바꿔주는 로직을 짜는 등등
	// service안쪽에는 RequestMapping을 쓰지 않는다!!!
	// 요청 --> FrontController --> Controller(RequestMapping) --> Service --> Mapper --> DB
	
	@Autowired
	private BoardMapper mapper;
	
	public List<BoardVO> boardListAjax(Model model) {
		// @ResponseBody
		// : 응답에 대한 제어권이 client에게 전부 되돌아간다.
		// : !!!! converter가 로드가 되어있지 않으면 작동 불가능 !!!
		
		List<BoardVO> list = mapper.boardList();
		// List --- GSON ---> JSON
		// List --- jackson ---> JSON
		// 스프링 프레임워크는 jackson 라이브러리를 로드해주기만 하면
		// 자동으로 json 구조로 변환 시켜준다.
		
		return list;
	}
	
	public void boardInsertAjax(BoardVO vo) {
		mapper.boardInsert(vo);
	}
	
	public void boardDeleteAjax(int idx) {
		mapper.boardDelete(idx);
	}
	
	public void boardUpdateAjax(BoardVO vo) {
		mapper.boardUpdateAjax(vo);
	}
}

 

Persistence Layer

package kr.smhrd.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import kr.smhrd.model.BoardVO;

public interface BoardMapper {
		
	public List<BoardVO> boardList();
	
	public void boardInsert(BoardVO vo);
	
	@Select("select * from board where idx=#{idx}")
	public BoardVO boardContent(int idx);
	
	// 쿼리문이 간단하다면 위쪽에 annotation 추가해서 처리할 수 있다.
	@Delete("delete from board where idx=#{idx}")
	public void boardDelete(int idx);

	public void boardUpdate(BoardVO vo);
	
	@Update("update board set contents=#{contents}, indate=now() where idx=#{idx}")
	public void boardUpdateAjax(BoardVO vo);
	
}