4월 15일

오늘 배운 것

  • 게시판 만들기(1)

게시판 만들기(1)

VO vs DTO

VO(Value Object)

  • 데이터 그 자체로 의미 있는 것을 담고 있는 객체이다.

  • DTO와 동일한 개념이나 차이점은 Read–Only 속성 객체이다.

  • VO : 사용 되는 값이 객체로 표현 되며, 값 변경이 없는 경우를 말한다.


DTO(Data Transfer Object)

  • 전송되는 데이터의 컨테이너이다.

  • VO와 동일하게 데이터를 저장하여 사용하도록 하는 부분에서 필요하다.

  • VO와 비교를 하여 보면 DTO는 다른 레이어로 데이터를 전달하는 작업을 처리하는 객체이다.

  • DTO : 데이터의 전송을 위한 객체이며, 비지니스 로직까지 담아서 사용하기 한다.

게시판 프로젝트 및 DB생성

  • DB생성
create table board(
    bno int auto_increment primary key,
    title varchar(150),
    content varchar(2000),
    writer varchar(50),
    regdate timestamp default now(), # 입력값이 없으면 현재시간 입력
    updatedate timestamp default now(), # 입력값이 없으면 현재시간 입력
);
  • 프로젝트 라이브러리 추가해서 생성

페이지 및 컨트롤러

페이지

컨트롤러

  • boardController 생성
  • 게시판관련 페이지 이동
package com.myapp.bbs.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import com.myapp.bbs.model.BoardVO;
import com.myapp.bbs.service.BoardService;

import lombok.extern.java.Log;

@Controller
@RequestMapping("/board")
@Log	// console의 Log 출력 (print out 대신 사용)
public class BoardController {
	
	private BoardService boardService;
	
	public BoardController(BoardService boardService) {
		this.boardService = boardService;
	}

	@GetMapping("/list")
	public String boardListGet() {
		log.info("게시판 리스트 페이지 진입");
		return "list";
	}
	
	@GetMapping("/enroll")
	public String boardEnrollGet(Model model) {
		log.info("게시판 등록 페이지 진입");
		model.addAttribute("board", new BoardVO());
		return "enroll";
	}
	
	@PostMapping("/enroll")
	public String boardEnrollPost(BoardVO board, RedirectAttributes attr) {
		boardService.enroll(board);
		attr.addFlashAttribute("message", "게시글 등록 완료!");
		
		return "redirect:/board/list"; // Post 다음 Redirect
	}
}
  • Mapper
package com.myapp.bbs.dao;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;

import com.myapp.bbs.model.BoardVO;

@Mapper
public interface BoardMapper {

	public void enroll(BoardVO board); // 게시판 글 등록
    
    }
  • 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">

<!-- com.myapp.bbs.dao 패키지 안의 BoardMapper.java를 여기서 입력하겠다는 설정  -->
<mapper namespace="com.myapp.bbs.dao.BoardMapper">

	<!-- board 테이블에 데이터 넣기 -->
    <insert id="enroll" parameterType="BoardVO"> 
      <!-- application.properties에 설정을 하지 않았다면 resultType="com.myapp.bbs.model.BoardVO" 라고 적었야함 -->
		insert into board(title, content, writer) 
		values (#{title}, #{content}, #{writer});
    </insert>
</mapper>
  • Service
package com.myapp.bbs.service;

import com.myapp.bbs.model.BoardVO;

public interface BoardService {

	public void enroll(BoardVO board); // 게시판 글 등록
}
  • Service implements
package com.myapp.bbs.service;

import org.springframework.stereotype.Service;

import com.myapp.bbs.dao.BoardMapper;
import com.myapp.bbs.model.BoardVO;

@Service
public class BoardServiceImpl implements BoardService {

	private BoardMapper boardMapper;
	
	public BoardServiceImpl(BoardMapper boardMapper) {
		this.boardMapper = boardMapper;
	}
	
	@Override
	public void enroll(BoardVO board) {
	
		boardMapper.enroll(board);
		
	}

}
  • HomeController로 페이지 이동
package com.myapp.bbs.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class HomeController {

	@GetMapping(value = {"/", "/dashboard"})
	public String dashBoard() {
		return "pages/dashboard";
	}
	
	@GetMapping("/tables")
	public String showTable() {
		return "pages/tables";
	}
	
	@GetMapping("/profile")
	public String showProfile() {
		return "pages/profile";
	}
	
	@GetMapping("/sign-in")
	public String login() {
		return "pages/sign-in";
	}
	
	@GetMapping("/sign-up")
	public String register() {
		return "pages/sign-up";
	}	
}

좋은 웹페이지 즐겨찾기