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(), # 입력값이 없으면 현재시간 입력
);
- 프로젝트 라이브러리 추가해서 생성
페이지 및 컨트롤러
페이지
- 템플릿 다운로드(bootstrap5 기반)
컨트롤러
- 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";
}
}
데이터 그 자체로 의미 있는 것을 담고 있는 객체이다.
DTO와 동일한 개념이나 차이점은 Read–Only 속성 객체이다.
VO : 사용 되는 값이 객체로 표현 되며, 값 변경이 없는 경우를 말한다.
전송되는 데이터의 컨테이너이다.
VO와 동일하게 데이터를 저장하여 사용하도록 하는 부분에서 필요하다.
VO와 비교를 하여 보면 DTO는 다른 레이어로 데이터를 전달하는 작업을 처리하는 객체이다.
DTO : 데이터의 전송을 위한 객체이며, 비지니스 로직까지 담아서 사용하기 한다.
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(), # 입력값이 없으면 현재시간 입력
);
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
}
}
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); // 게시판 글 등록
}
<?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>
package com.myapp.bbs.service;
import com.myapp.bbs.model.BoardVO;
public interface BoardService {
public void enroll(BoardVO board); // 게시판 글 등록
}
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);
}
}
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";
}
}
Author And Source
이 문제에 관하여(4월 15일), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@tutu10000/4월-15일저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)