※ 추가된 라이브러리

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

infinity Dashboard

@Controller

JSP나 MVC2 모델을 사용할 때의 Controller는 Servlet 파일을 이용하여 만들어냈다.

Servlet으로 만든 BoardController.java

하지만 Spring에서는 다르다. 

그저 @Controller 어노테이션를 클래스 위에 붙여주면 컨트롤러의 기능을 얻게 된다.

Spring에서 annotation을 통해 만든 Controller

 

@Log4j

Eclipse console 창에 '목록'이라고 찍어보게 하기 위해 사용한다.
BoardController가 제대로 실행된다면 '목록'이란 텍스트와 현재 만들어놓은 list 페이지가 나오는 것이다.

 

@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의 기능을 살펴보아야 할 것 같다. 

+ Recent posts