본문 바로가기

웹 개발/Spring

[Web_Spring] 10

실습(설계)

- [Web_Spring] 09 이어서

 

 

1. src/main/resource/mapper/BoardMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.board.mapper.BoardMapper">
    <select id="getList" resultType="boardVO">
        SELECT BOARD_NUMBER, BOARD_TITLE, BOARD_CONTENT, BOARD_WRITER, BOARD_REGISTER_DATE, BOARD_UPDATE_DATE
        FROM TBL_BOARD
    </select> 

    <insert id="insert">
        <selectKey keyProperty="boardNumber" order="BEFORE" resultType="long">
            SELECT SEQ_BOARD.NEXTVAL FROM DUAL
        </selectKey>
        INSERT INTO TBL_BOARD (BOARD_NUMBER, BOARD_TITLE, BOARD_CONTENT, BOARD_WRITER)
        VALUES (#{boardNumber}, #{boardTitle}, #{boardContent}, #{boardWriter})
    </insert>

    <select id="select" resultType="boardVO">
        SELECT BOARD_NUMBER, BOARD_TITLE, BOARD_CONTENT, BOARD_WRITER, BOARD_REGISTER_DATE, BOARD_UPDATE_DATE
        FROM TBL_BOARD
        WHERE BOARD_NUMBER = #{boardNumber}
    </select>

    <update id="update">
        UPDATE TBL_BOARD
        SET BOARD_TITLE = #{boardTitle}, BOARD_CONTENT = #{boardContent}, BOARD_UPDATE_DATE = SYSDATE
        WHERE BOARD_NUMBER = #{boardNumber}
    </update>

    <delete id="delete">
        DELETE FROM TBL_BOARD
        WHERE BOARD_NUMBER = #{boardNumber}
    </delete>

    <select id="getTotal" resultType="_int">
        SELECT COUNT(BOARD_NUMBER) FROM TBL_BOARD
    </select>

</mapper>

 

 

 

2. src/main/java/com.example.board/mapper/BoardMapper.java

package com.example.board.mapper;

import com.example.board.domain.vo.BoardVO;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

@Mapper
public interface BoardMapper {
    //    게시글 목록
    public List<BoardVO> getList();
    //    게시글 추가
    public void insert(BoardVO boardVO);
    //    게시글 한 개 가져오기
    public BoardVO select(Long boardNumber);
    //    게시글 수정
    public int update(BoardVO boardVO);
    //    게시글 삭제
    public int delete(Long boardNumber);
    //    게시글 전체 개수
    public int getTotal();
}

 

 

 

3. src/test/java/com.example.board/mapper/BoardMapperTests.java​

package com.example.board.mapper;

import com.example.board.domain.vo.BoardVO;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
@Slf4j
public class BoardMapperTests {
    @Autowired
    private BoardMapper boardMapper;

//    @Test
//    public void getListTest(){
//        boardMapper.getList().stream().map(BoardVO::toString).forEach(log::info);
//    }

//    @Test
//    public void insertTest(){
//        BoardVO boardVO = new BoardVO();
//        boardVO.setBoardTitle("새롭게 추가된 게시글 제목1");
//        boardVO.setBoardContent("새롭게 추가된 게시글 내용1");
//        boardVO.setBoardWriter("new1");
//        boardMapper.insert(boardVO); 
//        log.info("추가된 게시글 번호 : " + boardVO.getBoardNumber());
//    }

//    @Test
//    public void selectTest(){
//        log.info(boardMapper.select(2561L).toString());
//    }

//    @Test
//    public void updateTest(){
//        BoardVO boardVO = boardMapper.select(2581L);
//        boardVO.setBoardTitle("수정된 게시글 제목");
//        boardVO.setBoardContent("수정된 게시글 내용");
//
//        log.info("UPDATE COUNT : " + boardMapper.update(boardVO));
//    }

//    @Test
//    public void deleteTest(){
//        log.info("DELETE COUNT : " + boardMapper.delete(2581L));
//    }

//    @Test
//    public void getTotalTest(){
//        log.info("총 게시글 : " + boardMapper.getTotal());
//    }

}

 

 

 

4. src/main/java/com.example.board/domain.dao/BoardDAO.java​

package com.example.board.domain.dao;

import com.example.board.domain.vo.BoardVO;
import com.example.board.mapper.BoardMapper;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
// RDB에 가깝던 mapper 인터페이스를
// 객체에 가깝게 변경시켜주는 역할
@RequiredArgsConstructor
public class BoardDAO {
    private final BoardMapper boardMapper;

    //    게시글 목록
    public List<BoardVO> getList(){
        return boardMapper.getList();
    }
    //    게시글 추가
    public void register(BoardVO boardVO){
        boardMapper.insert(boardVO);
    }
    //    게시글 한 개 가져오기
    public BoardVO findByBoardNumber(Long boardNumber){ 
        return boardMapper.select(boardNumber);
    }
    //    게시글 수정
    public boolean modify(BoardVO boardVO){
        return boardMapper.update(boardVO) == 1;
    }
    //    게시글 삭제
    public boolean remove(Long boardNumber){
        return boardMapper.delete(boardNumber) == 1;
    }
    //    게시글 전체 개수
    public int getTotal(){
        return boardMapper.getTotal();
    }

}

 

 

 

5. src/test/java/com.example.board/domain/dao/BoardDaoTests.java​

package com.example.board.domain.dao;

import com.example.board.domain.vo.BoardVO;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
@Slf4j
public class BoardDaoTests {
    @Autowired
    private BoardDAO boardDAO;

//    @Test
//    public void getListTest(){
//        boardDAO.getList().stream().map(BoardVO::toString).forEach(log::info);
//    }

//    @Test
//    public void insertTest(){
//        BoardVO boardVO = new BoardVO();
//        boardVO.setBoardTitle("새롭게 추가된 게시글 제목1");
//        boardVO.setBoardContent("새롭게 추가된 게시글 내용1");
//        boardVO.setBoardWriter("new1");
//        boardDAO.register(boardVO);
//        log.info("추가된 게시글 번호 : " + boardVO.getBoardNumber());
//    } 

//    @Test
//    public void selectTest(){
//        log.info(boardDAO.findByBoardNumber(2582L).toString());
//    }

//    @Test
//    public void updateTest(){
//        BoardVO boardVO = boardDAO.findByBoardNumber(2582L);
//        boardVO.setBoardTitle("수정된 게시글 제목");
//        boardVO.setBoardContent("수정된 게시글 내용");
//
//        log.info("UPDATE : " + boardDAO.modify(boardVO));
//    }

//    @Test
//    public void deleteTest(){
//        log.info("DELETE : " + boardDAO.remove(2582L));
//    }

    @Test
    public void getTotalTest(){
        log.info("총 게시글 : " + boardDAO.getTotal());
    }
}

 

 

 

6. src/main/java/com.example.board/service/BoardService.java

package com.example.board.service;

import com.example.board.domain.vo.BoardVO;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public interface BoardService {
    public List<BoardVO> getList();
    public void register(BoardVO boardVO);
    public BoardVO get(Long boardNumber);
    public boolean modify(BoardVO boardVO);
    public boolean remove(Long boardNumber);
    public int getTotal();
}

 

 

 

7. src/main/java/com.example.board/service/BoardServiceImpl.java

package com.example.board.service;

import com.example.board.domain.dao.BoardDAO;
import com.example.board.domain.vo.BoardVO;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Service;

import java.util.List;
 
//    Service
//    여러 개의 DML을 하나의 서비스로 묶어준다.
@Service
@RequiredArgsConstructor
@Qualifier("board") @Primary
public class BoardServiceImpl implements BoardService{
    private final BoardDAO boardDAO;

    @Override
    public List<BoardVO> getList() {return boardDAO.getList();}

    @Override
    public void register(BoardVO boardVO) {boardDAO.register(boardVO);}

    @Override
    public BoardVO get(Long boardNumber) {
        return boardDAO.findByBoardNumber(boardNumber);
    }

    @Override
    public boolean modify(BoardVO boardVO) {
        return boardDAO.modify(boardVO);
    }

    @Override
    public boolean remove(Long boardNumber) {
        return boardDAO.remove(boardNumber);
    }

    @Override
    public int getTotal() {
        return boardDAO.getTotal();
    }
}

 

 

 

8. src/main/resource/templates/board/list.html

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body> 

</body>
</html>

 

 

 

9. src/main/java/com.example.board/controller/BoardController.java

package com.example.board.controller;

import com.example.board.service.BoardService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping; 
import org.springframework.web.bind.annotation.RequestMapping;

/*
 *   TASK        URL                 METHOD      PARAMETER       FORM        URL이동
 *
 *   전체목록    /board/list          GET          없음             없음
 *   등록       /board/register      POST         모든 항목         필요
 *   조회       /board/read          GET          boardNumber     없음
 *   삭제       /board/remove        GET          boardNumber     없음
 *   수정       /board/modify        POST         모든 항목         필요
 *
 * */
@Controller
@Slf4j
@RequiredArgsConstructor
@RequestMapping("/board/*")
public class BoardController {
    private final BoardService boardService;

    @GetMapping("list")
    public void getList(Model model){
        log.info("----------------------------");
        log.info("list.............");
        log.info("----------------------------");

        model.addAttribute("boardList", boardService.getList());
    }

}

 

 

 

 

'웹 개발 > Spring' 카테고리의 다른 글

[Web_Spring] 12  (0) 2022.06.24
[Web_Spring] 11  (0) 2022.06.23
[Web_Spring] 09  (0) 2022.06.21
[Web_Spring] 08  (0) 2022.06.20
[Web_Spring] 07  (0) 2022.06.19