2021. 6. 22. 23:13ㆍSpring
이번에는 게시판 기능 구현하는 걸 해볼 겁니다
게시판 기능 구현하기
css, html 등 화면 디자인에 필요한 부분은 선생님께서 배포를 해주셨습니다.
이를 바탕으로 게시판 기능을 구현해 보겠습니다.
현재, 프로젝트는 기본적인 설정이 세팅되어 있는 상태 입니다. ( Lombok, Mybatis, Tiles View Template 등등 )
먼저, 배포받은 css, font, img 등은 "src" -> "main" -> "webapp" -> "resource" 폴더에 넣습니다.
그리고, 화면에 보여지는 .jsp 파일은 views 폴더에 넣습니다.
이 외에, 공통적으로 사용되는 header , footer 등은 tiles 폴더에 넣었습니다.
이제, 각각의 freeBoard 에 있는 화면들을 각각 컨트롤러를 경유할 수 있도록 매핑해줍니다.
이 때, 설정 파일(servlet-context.xml) 에서 component-scan 을 작성해 주었는지 확인 해야합니다.
※ "com.team404.controller" 패키지에 있는 파일을 읽어서 bean 으로 생성
컨트롤러에서는 각각의 화면에 대한 기능들을 만들어 주면 되는데요, 이 때 서비스와 DB에 접근할 myBatis 기반의 Mapper 를 만들어 줍니다.
Service와 Mapper 는 인터페이스를 하나 만들고, 그 인터페이스를 구현할 Impl 을 만듭니다.
그리고, service 도 마찬가지로 설정파일에 component-scan 을 작성해줍니다.
이 때, myBatis는 인터페이스의 구현을 .xml 파일로 합니다.
FreeBoardMapper.xml 에서는 FreeBoardMapper Interface 를 구현화 해주면 됩니다.
그리고, 외부 설정 파일 ( 저는 "DB-context.xml" 이지만, 원래는 "root-context.xml" 입니다 ) 에서 myBatis 에 대한 연결을 해주어야 합니다.
scan 도 있지말고 해주시고, 위의 resultType 에 FreeBoardVO 라고 줄여서 쓰기 위해서, 별칭을 만든 mybatis-config.xml 도 지정 해줍니다.
아래는 컨트롤러의 코드 입니다.
package com.team404.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import com.team404.command.FreeBoardVO;
import com.team404.freeboard.service.FreeBoardService;
@Controller
@RequestMapping("/freeBoard")
public class FreeBoardController {
@Autowired
@Qualifier("freeService")
private FreeBoardService freeService;
// 리스트 화면
@RequestMapping("/freeList")
public void freeList(Model model) {
model.addAttribute("list", freeService.getList()); // 화면에 전달(여러값이라면 맵으로가능)
}
// 변경 화면
// @RequestMapping("/freeModify")
// public void freeModify(@RequestParam("bno") int bno, Model model) {
// model.addAttribute("boardVO", freeService.getDetail(bno));
// }
// 상세 화면과 변경화면은 같기 때문에 하나로 합침
@RequestMapping({"/freeDetail", "/freeModify"})
public void getDetail(@RequestParam("bno") int bno, Model model) {
// 메서드이름 - getDetail()
// sql문을 이용해서 FreeBoardVO에 결과값을 반환받습니다.
// 화면에서 사용할 수 있도록 boardVO 이름으로 model을 전달하고, 화면에 처리
model.addAttribute("boardVO", freeService.getDetail(bno));
}
// 등록 화면
@RequestMapping("/freeRegist")
public void freeRsgist() {
}
// 등록요청
@RequestMapping("/registForm")
public String registForm(FreeBoardVO vo,
RedirectAttributes RA) {
int result = freeService.regist(vo); // 성공시 1반환, 실패시 0
if(result == 1) {
RA.addFlashAttribute("msg", "등록 처리 되었습니다");
} else {
RA.addFlashAttribute("msg", "등록에 실패했습니다. 다시 시도하세요");
}
return "redirect:/freeBoard/freeList"; // 다시 컨트롤러를 태움
}
// 글 업데이트 처리
@RequestMapping("/freeUpdate")
public String freeUpdate(FreeBoardVO vo, RedirectAttributes RA) {
/*
* 1. form에서 넘어오는 값을 받습니다.
* 2. update()를 이용해서 게시글을 수정처리 합니다.
* 3. update()메서드는 성공 or 실패의 결과를 받아옵니다.
* 4. list화면으로 msg담아서 이동
*/
int result = freeService.update(vo);
if(result == 1) {
RA.addFlashAttribute("msg", "성공적으로 변경되었습니다.");
} else {
RA.addFlashAttribute("msg", "변경에 실패했습니다. 다시 시도하세요");
}
return "redirect:/freeBoard/freeList";
}
// 글 삭제 요청
@RequestMapping("/freeDelete")
public String freeDelete(@RequestParam("bno") int bno,
RedirectAttributes RA) {
int result = freeService.delete(bno);
if(result == 1) {
RA.addFlashAttribute("msg", "성공적으로 삭제되었습니다");
} else {
RA.addFlashAttribute("msg", "삭제에 실패했습니다. 다시 시도하세요");
}
return "redirect:/freeBoard/freeList";
}
}
위의 코드를 보면, 각각의 기능들마다 필요한 변수들은 화면을 통해서 넘어왔습니다.
위의 코드처럼 get 방식을 사용해서 넘긴 것도 있고, <form> 태그를 이용해서 넘긴 것도 있습니다.
아래는 FreeBoardServiceImpl 코드 입니다.
package com.team404.freeboard.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.team404.command.FreeBoardVO;
import com.team404.freeboard.mapper.FreeBoardMapper;
@Service("freeService") // componentscan
public class FreeBoardServiceImpl implements FreeBoardService{
@Autowired
private FreeBoardMapper freeMapper;
@Override
public int regist(FreeBoardVO vo) {
return freeMapper.regist(vo);
}
@Override
public List<FreeBoardVO> getList() {
return freeMapper.getList();
}
@Override
public FreeBoardVO getDetail(int bno) {
return freeMapper.getDetail(bno);
}
@Override
public int update(FreeBoardVO vo) {
return freeMapper.update(vo);
}
@Override
public int delete(int bno) {
return freeMapper.delete(bno);
}
}
※ JSP를 선행하고 왔다면 쉽게 이해가 가실 겁니다.
'Spring' 카테고리의 다른 글
Day90 - [Spring]검색페이징 ( 게시판 검색 구현 ) (2) | 2021.06.24 |
---|---|
Day90 - [Spring]페이징, 페이지네이션 (0) | 2021.06.23 |
Day88 - [Spring]타일즈 뷰 템플릿(Tiles View Template) (0) | 2021.06.22 |
Day88 - [Spring]롬복(Lombok) 설치 및 사용법 (0) | 2021.06.21 |
Day87 - [Spring]myBatis (0) | 2021.06.19 |