반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- mybatis연결
- dataSource설정
- oracle
- mysqlinsert한글깨짐
- 게시판만들기
- 톰캣시작페이지설정
- Java
- 스프링프로젝트
- double-submit
- 게시판상세보기
- insert할글깨짐
- 컨트롤러url
- 자바스크립트
- 이클립스db연결
- 톰캣9.0다운로드
- 이클립스데이터베이스연결
- HTML
- 스프링게시판만들기
- Could not create the java Virtual Machine
- 한글깨짐해결방법
- 저장할때한글깨짐
- 스프링게시판상세보기
- 게시판목록조회
- url설정
- 게시판insert
- 스프링게시판insert
- insert 중복방지
- 스프링게시판목록조회
- 전자정부프레임워크 double-submit
- 스프링게시판등록
Archives
- Today
- Total
하루의 일상💜
[Spring] #2. 게시판 만들기 _ DAO, Service 생성 본문
반응형
DAO 생성
DB에 insert 확인이 되면 이제 DAO를 만들 건데 Spring 에서는 repository 패키지 안에 생성한다.
main > java > repository > BoardDAO
package com.example.app.repository;
import com.example.app.domain.vo.BoardVO;
import com.example.app.mapper.BoardMapper;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
@RequiredArgsConstructor
public class BoardDAO {
private final BoardMapper boardMapper;
// 추가
public void save(BoardVO boardVO) {
boardMapper.insert(boardVO);
}
// 수정
public void setBoardVO(BoardVO boardVO) {
boardMapper.update(boardVO);
}
// 삭제
public void remove(Long boardNumber) {
boardMapper.delete(boardNumber);
}
// 조회
public BoardVO findById(Long boardNumber) {
return boardMapper.select(boardNumber);
}
// 전체 조회
public List<BoardVO> findAll() {
return boardMapper.selectAll();
}
}
@Repository
@RequiredArgsConstructor
위에서 Repository와 ReauiredArgsConstructor 등록해줌으로써 스프링 빈에 등록해준다는 의미이고 스프링이 관리하게 될 수 있게 해준다. 여기서 다오는 데이터베이스 쪽에서 전달받는 결과값들을 처리 할 수 있는 객체지향이라는 영역에서 가장 앞에 마중나와있는 영역이라고 할 수 있다.
DAO Service
서비스의 필요성
DAO를 만들면 컨트롤러에서 바로 사용해도 상관은 없지만 DAO는 한 쿼리당 하나의 다오 매서드가 1대1 매핑이 되어야 한다. 쿼리당 다오 매서드가 하나씩 구현이 되기 때문에 쿼리의 양이 많아지면서 복잡한 코드가 될 것이다.
여기서 서비스는 여러 쿼리의 다오를 묶는 역할을 서비스가 해준다. 그렇기 때문에 컨드롤러에서는 이 서비스를 호출만 하게 되면 간결한 쿼리가 나오게 될 것이고 클린코드가 나오게 되는 것이다.
만약 다오를 거치지 않고 매퍼의 쿼리를 서비스에서 묶는 다면?
매퍼를 서비스에서 묶을 수 없는 이유는 객체지향이라는 것이 있기 때문에 매퍼에서는 파라미터타입과 리턴타입이 묶여있고 쿼리에 맞게끔이미 결합을 시켜놓은 상태라서 서비스에서 구현이 어려울 수 있다.
Service 생성
service는 상황에 따라 class로도 생성이 되고 interface로도 생성이 된다.
여기서 사용하는 매서는 화면에서 보이는 쪽으로 생각하며 설정한다.
package com.example.app.service;
import com.example.app.domain.vo.BoardVO;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public interface BoardService {
// 추가
public void register(BoardVO boardVO);
// 수정
public void modify(BoardVO boardVO);
// 삭제
public void remove(Long boardNumber);
// 조회
public BoardVO show(Long boardNumber);
// 전체 조회
public List<BoardVO> showAll();
}
구현체 Service 생성
서비스를 만든 다음 이제 구현체가 필요하다
게시판에 해당하는 이름을 설정해주고 위에서 설정한 BoardService를 상속받게 해준다.
package com.example.app.mapper;
import com.example.app.domain.vo.BoardVO;
import com.example.app.repository.BoardDAO;
import com.example.app.service.BoardService;
import lombok.RequiredArgsConstructor;
import java.util.List;
@Service
@RequiredArgsConstructor @Qualifier("community") @Primary
public class CommunityBoardService implements BoardService {
private final BoardDAO boardDAO;
@Override
public void register(BoardVO boardVO) {
boardDAO.save(boardVO);
}
@Override
public void modify(BoardVO boardVO) {
boardDAO.setBoardVO(boardVO);
}
@Override
public void remove(Long boardNumber) {
boardDAO.remove(boardNumber);
}
@Override
public BoardVO show(Long boardNumber) {
return boardDAO.findById(boardNumber);
}
@Override
public List<BoardVO> showAll() {
return boardDAO.findAll();
}
}
CommunityBoardServiceTest
package com.example.app.service;
import com.example.app.domain.vo.BoardVO;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
@Slf4j
public class CommunityBoardServiceTest {
@Autowired
private BoardService boardService;
@Test
public void registerTest(){
BoardVO boardVO = new BoardVO();
boardVO.create("새로 작성한 게시글 제목", "홍길동", "새로 작성한 게시글 내용");
boardService.register(boardVO);
}
@Test
public void modifyTest(){
BoardVO boardVO = boardService.show(1L);
boardVO.setBoardTitle("수정된 게시글 제목");
boardService.modify(boardVO);
}
@Test
public void showTest(){
log.info("board: " + boardService.show(1L));
}
@Test
public void showAllTest(){
boardService.showAll().stream().map(BoardVO::getBoardTitle).forEach(log::info);
}
}
반응형
'SpringBoot' 카테고리의 다른 글
[Spring] #6. 게시판만들기_첨부파일 업로드/수정/삭제 (0) | 2022.12.29 |
---|---|
[Spring] #5. 게시판 만들기 _ 페이징처리 (0) | 2022.12.12 |
[Spring] #4. 게시판만들기 _ 입력받은 데이터를 화면에 보이기 (1) | 2022.11.24 |
[Spring] #3. 게시판 만들기 _ Controller (0) | 2022.11.23 |
[Spring] #1. 게시판 만들기 _ DB 테이블 VO로 만들고 Mapper에서 DB로 insert 하기 (추가, 수정, 조회, 전체조회) (0) | 2022.11.18 |