※ 추가된 라이브러리
log4jdbc-log4j2 | https://mvnrepository.com/artifact/org.bgee.log4jdbc-log4j2/log4jdbc-log4j2-jdbc4.1 |
jackson-databind | https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind |
[게시판 만들기]
준비물
- BoardVO
- BoardController
- BoardServiceImpl
- BoardService
- BoardMapper
- Controller, ServiceImpl, Mapper의 test.java 파일들
BoardVO.java
package com.kb.domain; //도메인 패키지를 별도로 만들어 관리한다.
import java.util.Date; //Date는 java.util 패키지를 사용한다.
import lombok.Data; //annotation을 사용하여 lombok 라이브러리를 사용한다.
//lombok
@Data //마우스 우클릭 - source - getters & setter와 같다.
public class BoardVO {
private int bno; //게시글번호
private String title; //게시글제목
private String content; //게시글내용
private String wrtier; //게시글작성자 (칼럼명 바꿔야하는데 일단 그냥 간다.)
private Date regDate; //게시글작성일자
private Date updateDate;//게시글수정일자
}
@Data
getters & setter를 annotation으로 줄인 @getter와 @setter를 합쳐놓았다.
이전에 MVC로 만들기 위해 VO를 만들었을 때는 필드가 많으면 많을수록 굉장히 긴 파일이 만들어졌지만
이제는 Spring에서 @하나로 한줄로 축약시킬 수 있게 되었다.
BoardController.java
package com.kb.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import com.kb.service.BoardService;
import lombok.AllArgsConstructor;
import lombok.extern.log4j.Log4j;
// 이 컨트롤러에 사용되는 애들은 다 board다.
@RequestMapping("/board/*")
@Controller
@Log4j
@AllArgsConstructor
public class BoardController {
//service 객체 생성
//service.메소드() 호출하여 매퍼까지 호출 가능
private BoardService service;
//controller에서 값을 view에 줄 때 request.setAttribute사용했음.
//그게 spring에서는 model이다.
@GetMapping("list")
public void list(Model model) {
//얘가 list로 오면 목록을 찍어라.
//파일이 없을 때는 당연히 웹에 나오지 않지만 console에는 목록이 찍힌다.
log.info("목록");
//view에다 값을 던지는 것.
model.addAttribute("list", service.getList());
}
}
@RequestMapping(/board/*) + @GetMapping("list")
특정 URI로 요청을 보내면 특정 메소드와 매핑하기위해 사용한다.
즉 괄호 안의 경로와 Controller를 이어주는 것이다.
/RequestMapping/GetMapping = localhost/board/list
@Controller
JSP나 MVC2 모델을 사용할 때의 Controller는 Servlet 파일을 이용하여 만들어냈다.
하지만 Spring에서는 다르다.
그저 @Controller 어노테이션를 클래스 위에 붙여주면 컨트롤러의 기능을 얻게 된다.
@Log4j
@AllArgsConstructor
직역하면 된다. 모든 필드값을 파라미터로 받는 생성자를 만든다.
BoardServiceImpl.java
package com.kb.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.kb.domain.BoardVO;
import com.kb.mapper.BoardMapper;
import lombok.AllArgsConstructor;
import lombok.Setter;
import lombok.extern.log4j.Log4j;
@Service
@Log4j
@AllArgsConstructor
public class BoardServiceImpl implements BoardService {
@Setter(onMethod_ = @Autowired)
private BoardMapper mapper;
@Override
public void register(BoardVO board) {
log.info("register");
mapper.insert(board);
}
@Override
public BoardVO get(int bno) {
return mapper.read(bno);
}
@Override
public boolean modify(BoardVO board) {
return mapper.update(board) == 1;
}
@Override
public boolean remove(int bno) {
return mapper.delete(bno) == 1;
}
@Override
public List<BoardVO> getList() {
log.info("getList..................");
return mapper.getList(); // 전체 내용을 보여달라
}
}
ServiceImpl파일도 마찬가지로 service라는 패키지를 만들어 관리해준다.
@service
@Controller와 마찬가지로 붙여줌으로써 service의 역할을 한다.
@setter(onMethod_ = @Autowired) (보충필요)
주의해야 할 점은 onMethod 뒤에 언더바 ( _ )가 있어야 한다는 것이다.
버전에 따라 없는 것도 있다고 하셨는데 우리 클래스는 있는 버전을 사용중이다.
Ctrl + Space, Enter를 치면 매번 언더바가 안 붙어 있는 채로 나와서 제자리에 붙여주는 식으로 사용하고 있다.
@Autowired
직역하면 '자동으로 연결되는' 으로 보인다.
여기서는 boardmapper에 알맞은 타입의 객체, BoardMapper를 자동으로 주입해달라는 의미의 annotation이다.
적다 보니 모든 설명이 annotation으로 귀결되는 것 같다.
우선 기존의 하던 것들 중 이해할 수 없는 부분이 줄어든 것은 좋으나
기존 것을 이해 못하면 그냥 줄었구나 정도밖에 되지 않는다.
최대한 기존에 MVC를 어떻게 작성하고 연결시켰는지를 기억하면서
annotation의 기능을 살펴보아야 할 것 같다.
'수업정리' 카테고리의 다른 글
[소스 동냥(3)] 수업 중 springframework 한글 깨짐 (0) | 2022.06.16 |
---|---|
[스프링] Board to Member _ Board관련.java | Board관련.jsp (0) | 2022.05.27 |
스프링 (1) (0) | 2022.05.13 |
0420 - 서버프로그램 구현_jsp(1) (0) | 2022.04.25 |