[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)

root-context

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));
}

삭제수정로그



비즈니스 계층 복습 끝!

태그:

카테고리:

업데이트:

댓글남기기