비즈니스계층
비즈니스계층은 고객의 요구사항을 반영하는 계층으로, 프레젠테이션 계층과 영속 계층의 중간다리 역할을 한다.
주로 'Service'로 표현된다.
비즈니스 계층을 만들 때는, service 인터페이스와 그 인터페이스를 상속 받는 Implements 클래스를 생성한다.
src/main/java > new InterFace > package: kr.icia.service / name: BoardService
package kr.icia.service;
import java.util.List;
import kr.icia.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(); //목록 불러오기
}
src/main/java > kr.icia.service > new Class > name: BoardServiceImp > Interfaces: BoardService
// BoardService를 implements 할 새로운 Class 생성 작업
이 클래스는 상속을 받았기 때문에, 부모의 메소드를 그대로 따오며 Override할 수 있다.
package kr.icia.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import kr.icia.domain.BoardVO;
import kr.icia.mapper.BoardMapper;
import lombok.AllArgsConstructor;
import lombok.Setter;
import lombok.extern.log4j.Log4j;
@Log4j //lombok 로그 이용
@Service //이 클래스가 서비스 계층을 맡는다고 알림
@AllArgsConstructor //모든 매개변수에 대한 생성자 생성 (생성자 여러개 아님)
public class BoardServiceImp implements BoardService {
@Setter(onMethod_ = @Autowired)
private BoardMapper mapper;
@Override
public void register(BoardVO board) {
log.info("register......" + board);
mapper.insertSelectKey(board);
}
@Override
public BoardVO get(Long bno) {
log.info("get......" + bno);
return mapper.read(bno);
}
@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;
}
@Override
public List<BoardVO> getList() {
log.info("getList......");
return mapper.getList();
}
}
작성 후 아래 경로에서 root-context.xml 파일을 연다.
Namespaces 에서 context 를 체크한다. (이전에 했다면 생략 가능하다.)
<mybatis-spring:scan base-package="kr.icia.mapper" /> 아래에 코드를 추가한다.
<context:component-scan
base-package="kr.icia.service">
</context:component-scan>
스캔하면 해당 패키지를 읽고 메모리에 자동으로 올려준다.
이제 테스트 클래스에서 테스트를 진행해볼 것이다.
src/test/java > new Class 생성 > package: kr.icia.service / name: BoardServiceTests
package kr.icia.service;
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 kr.icia.domain.BoardVO;
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 testRegister() {
BoardVO board = new BoardVO();
board.setTitle("새로 작성하는 글 0928");
board.setContent("새로 작성하는 내용 0928");
board.setWriter("새로운 작성자 0928");
service.register(board);
log.info("생성된 게시물 번호: " + board.getBno());
}
}
새로운 게시글을 만들고 제목, 내용, 작성자를 부여하고, 시퀀스를 통해 잘 생성됐는지 확인하는 절차를 거쳤다.
테스트가 잘 이루어졌다.
'개발입문 > SPRING 게시판 만들기' 카테고리의 다른 글
[SPRING] 화면처리 (0) | 2022.10.12 |
---|---|
[SPRING] 프레젠테이션계층의 CRUD 구현 (0) | 2022.10.12 |
[SPRING] 파일 Import 하기 (0) | 2022.10.12 |
[SPRING] 테이블 CRUD 구현 (0) | 2022.10.12 |
[SPRING] spring 환경 구축 (0) | 2022.10.12 |
댓글