실습(설계)
- [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 |