[spring] 비즈니스 계층 복습
업데이트:
비즈니스 계층 설정
설계를 할 때 각 계층 간의 연결은 인터페이스를 이용해 느슨한 결합
을 한다. 게시물은 BoardService 인터페이스와 인터페이스를 구현한 BoardServiceImpl 클래스를 생성한다.
BoardService 인터페이스
package org.example.service;
import java.util.List;
import org.example.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();
}
BoardService 클래스
빨간 줄이 뜨는 클래스 이름에 마우스 오버 후 Add unimplemneted methods를 클릭하면 구현해야 할 함수들 전부를 자동 완성 시켜준다.
package org.example.service;
import java.util.List;
import org.example.domain.BoardVO;
import org.example.mapper.BoardMapper;
import org.springframework.stereotype.Service;
import lombok.AllArgsConstructor;
import lombok.extern.log4j.Log4j;
@Service
@Log4j // 여기에서 빨간 줄이 뜨면 pom.xml에 가서 Logging 부분 <scope>runtime</scope>를 주석처리
@AllArgsConstructor
public class BoardServiceImpl implements BoardService{
private BoardMapper mapper;
@Override
public void register(BoardVO board) {
// TODO Auto-generated method stub
}
@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;
}
}
스프링 서비스 객체 설정(root-context.xml)
source 추가
<context:component-scan
base-package="org.example.service"></context:component-scan>
테스트 코드
테스트 클래스 생성
package org.example.service;
import static org.junit.Assert.assertNotNull;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import lombok.Setter;
import lombok.extern.log4j.Log4j;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/root-context.xml")
@Log4j
public class BoardServiceTests {
@Setter(onMethod_ = @Autowired)
private BoardService service;
@Test
public void testExist() {
log.info(service);
assertNotNull(service);
}
}
BoardService 객체가 생성되고 BoardMapper가 주입되었다면 위와 같이 BoardService 객체와
데이터베이스 관련 로그가 출력된다.
등록 작업
BoardServiceImpl 수정
@Override
public void register(BoardVO board) {
log.info("register : " + board);
mapper.insertSelectKey(board);
}
테스트 코드
@Test
public void testRegister() {
BoardVO board = new BoardVO();
board.setTitle("새로 작성하는 끌!");
board.setContent("새로 작성하는 내요옹!");
board.setWriter("테스트 작성자");
service.register(board);
log.info("생성된 게시물 번호 : " + board.getBno());
}
목록 리스트 작업
BoardServiceImpl 수정
@Override
public List<BoardVO> getList() {
log.info("getList!!!!!!!!!!!!!!!!!!!!!!!");
return mapper.getList();
}
테스트 코드
@Test
public void testGetList() {
service.getList().forEach(board -> log.info(board));
}
조회 작업
BoardServiceImpl 수정
@Override
public BoardVO get(Long bno) {
log.info("get!!!!!!!!!!!!!!!!!!" + bno);
return mapper.read(bno);
}
테스트 코드
@Test
public void testGet() {
log.info(service.get(1L));
}
삭제/수정 구현
BoardServiceImpl
@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;
}
테스트 코드
@Test
public void testModify() {
BoardVO board = service.get(1L);
if(board == null) return;
board.setTitle("수정하는데요?");
log.info("modif!!!!!!!!!" + service.modify(board));
}
@Test
public void testRemove() {
log.info("remove!!!!!!" + service.remove(2L));
}
비즈니스 계층 복습 끝!
댓글남기기