2023.11.28 - [백엔드(Back-End)/Spring Boot] - [sts4-Spring Boot] 04. CRUD Test 작성
CRUD까지 했으니, 그 CRUD를 어떻게 사용할지 (어떨 때 각 메서드를 활용할지)를 만들어야 한다.
즉, Serive인 비즈니스 로직을 정의하고 구현해보자~!
메인/자바의 com.board > 서비스 패키지에 인터페이스를 생성한다.
package com.board.service;
import java.util.List;
import com.board.domain.BoardDTO;
public interface BoardService {
public boolean registerBoard(BoardDTO params);
public BoardDTO getBoardDetail(Long idx);
public boolean deleteBoard(Long idx);
public List<BoardDTO> getBoardList();
}
작성한 내용을 받아서 게시글에 등록하는 registerBoard와
게시글의 인덱스만 받아서 해당 글을 반환하는 getBoardDetail
게시글의 인덱스만 받아서 해당 글을 삭제하는 deleteBoard
모든 게시글 반환하는 getBoardList
메서드를 정의한다.
인터페이스를 만들었으면? 그렇다!
구현체를 만들어줘야 한다.
비즈니스 로직을 실제로 구현하기 위해, 서비스 패키지에 BoardServiceImpl 구현체(클래스)를 생성한다.
interface에 대한 구현체가 딱 하나만 있으면 보통 Impl을 붙임
구현체가 영어로 Implementation여서 접미사 Impl로 주로 표현
비즈니스 로직을 담당하는 서비스 클래스이므로 @Service
boradMapper 인터페이스 Bean을 주입한다.
해당 인터페이스에는 Mapper.xml 쿼리 CRUD 함수들이 정의되어 있음 => MyBatis의 매퍼파일에 정의된 SQL 쿼리와 매핑
package com.board.service;
import java.util.Collections;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.board.domain.BoardDTO;
import com.board.mapper.BoardMapper;
@Service
public class BoardServiceImpl implements BoardService {
@Autowired
private BoardMapper boardMapper;
이제 각 메서드를 정의하면 된다.
1. 게시글 생성 및 수정 기능
- 게시글 인덱스가 목록에 없음 -> 게시글 생성 (insertBoard에 작성한 내용 전달)
- 게시글 인덱스가 목록에 있음 -> 게시글 수정 (updateBoard에 작성한 내용 전달)
(내용 : 작성/수정 시간, 제목, 내용, 작성자, 공지글여부, 비밀글여부 // 인덱스는 자동++생성)
쿼리 실행 결과 ~> true / false
@Override
public boolean registerBoard(BoardDTO params) {
int queryResult = 0;
if (params.getIdx() == null) {
queryResult = boardMapper.insertBoard(params);
} else {
queryResult = boardMapper.updateBoard(params);
}
return (queryResult == 1) ? true : false;
}
2. 게시글 하나 조회
- 인덱스에 해당하는 게시글 조회
~> 삭제 되지 않은 (selectBoardDetail에서 조건 반영됨) 게시글
@Override
public BoardDTO getBoardDetail(Long idx) {
return boardMapper.selectBoardDetail(idx);
}
3. 게시글 삭제
- selectBoardDetail에 삭제되지 않은 (deleteYn이 'N'인) 게시글만 조회
('Y'거나 없는 게시글이면 삭제 실행되지 않음)
- 해당 글의 deleteYn을 'Y'로 변경 & deleteTime에 현재 시간 저장 (deleteBoard에 인덱스 전달)
쿼리 실행 결과 ~> true / false
@Override
public boolean deleteBoard(Long idx) {
int queryResult = 0;
BoardDTO board = boardMapper.selectBoardDetail(idx);
if(board != null && "N".equals(board.getDeleteYn())) {
queryResult = boardMapper.deleteBoard(idx);
}
return (queryResult == 1) ? true : false;
}
4. 전체 게시글 조회
- 게시글 리스트를 넣기 위해 비어있는 리스트를 만든다.
- 게시글 수를 세고 (전체 글을 조회하는 것엔 크게 전달할 게 없으므로 selectBoardTotalCount();)
- 글의 수가 1개 이상 있으면 selectBoardList(삭제 안 된 글, 공지는 맨 위, 인덱스 내림차순)를 빈 리스트에 대입
~> 게시글 리스트 반환
@Override
public List<BoardDTO> getBoardList() {
List<BoardDTO> boardList = Collections.emptyList();
int boardTotalCount = boardMapper.selectBoardTotalCount();
if (boardTotalCount > 0) {
boardList = boardMapper.selectBoardList();
}
return boardList;
}
다음 글은 컨트롤러 처리!
'백엔드(Back-End) > Spring Boot' 카테고리의 다른 글
[sts4-Spring Boot] 갑자기 sql database 에러날 때 (1) | 2023.12.04 |
---|---|
[sts4-Spring Boot] 06. Layout (Presentation Layer - 컨트롤러 처리) (0) | 2023.11.30 |
[sts4-Spring Boot] 04. CRUD Test 작성 (0) | 2023.11.28 |
[sts4-Spring Boot] 03. 데이터베이스 CRUD (0) | 2023.11.28 |
[스프링부트] main 실행하기 (1) | 2023.11.26 |