비즈니스 계층 : 고객의 요구사항을 반영하는 계층. 프레젠테이션 계층과 영속 계층의 중간 다리 역할을 하게 된다.
org.zerock.service 패키지를 만든다.
BoardService 인터페이스와 이를 구현한 BoardServiceImpl 클래스를 선언한다.
package org.zerock.service;
import java.util.List;
import org.zerock.domain.BoardVO;
public interface BoardService {
public void register(BoardVO board);
public BoardVO get(Long bno);
public boolean modify(BoardVO board);
public boolean remove(Long bno);
public List<BoardVO> getList();
}
BoardServiceImpl 클래스
package org.zerock.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.zerock.domain.BoardVO;
import org.zerock.mapper.BoardMapper;
import lombok.AllArgsConstructor;
import lombok.Setter;
import lombok.extern.log4j.Log4j;
@Log4j
@Service
@AllArgsConstructor
public class BoardServiceImpl implements BoardService{
//spring 4.3 이상에서 자동 처리
@Setter(onMethod_ = @Autowired)
private BoardMapper mapper;
@Override
public void register(BoardVO board) {
}
@Override
public BoardVO get(Long bno) {
// TODO Auto-generated method stub
return null;
}
@Override
public boolean modify(BoardVO board) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean remove(Long bno) {
// TODO Auto-generated method stub
return false;
}
@Override
public List<BoardVO> getList() {
// TODO Auto-generated method stub
return null;
}
}
@Log4j 오류가 날 때는 pom.xml에 log4j를 파트1에서 했던 것처럼 버전 1.2.17로 바꿨는지 확인해보자.
위에서 만든 것을 스프링 빈으로 인식하기 위해 root-context.xml에 스캔할 패키지를 추가한다.
root-context.xml 네임스페이스 탭에서 context를 추가하고, 다음 코드를 추가한다.
<context:component-scan base-package="org.zerock.service"></context:component-scan>
테스트 생략.
BoardServiceImpl에서 파라미터로 전달되는 BoardVO 타입의 객체를 BoardMapper를 통해서 처리한다.
@Override
public void register(BoardVO board) {
log.info("register.........." + board);
mapper.insertSelectKey(board);
}
BoardServiceImpl에서 현재 테이블에 저장된 모든 데이터를 가져오는 getList()
@Override
public List<BoardVO> getList() {
log.info("getList...........");
return mapper.getList();
}
게시물 번호가 파라미터이고 BoardVO의 인스턴스가 리턴된다.
@Override
public BoardVO get(Long bno) {
log.info("get.........." + bno);
return mapper.read(bno);
}
void로 설계할 수도 있지만 엄격하게 처리하기 위해 Boolean타입으로 처리한다.
@Override
public boolean modify(BoardVO board) {
log.info("modify........." + board);
return mapper.update(board) == 1;
}
@Override
public boolean remove(Long bno) {
log.info("remove.........." + bno);
return mapper.delete(bno) == 1;
}