보라코딩

스프링부트 게시판 CRUD (타임리프 사용) 본문

코딩/Spring

스프링부트 게시판 CRUD (타임리프 사용)

new 보라 2023. 5. 20. 20:35

 

READ

 

BoardController
@Autowired
private BoardService service;

@GetMapping("/list")
public void getList(Model model){

    List<BoardVO> boardList = service.board_getList();

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

@GetMapping({"/get", "/update"})
public void get(Model model, int bno){

    log.info("bno"+bno);

    BoardVO boardVO = service.board_get(bno);

    model.addAttribute("boardVO", boardVO);

}

 

 

 

BoardService
@Autowired
private BoardMapper mapper;

public List<BoardVO> board_getList() {

        List<BoardVO> boardList = mapper.board_getList();

        return boardList;
}


public BoardVO board_get(int bno) {

    BoardVO boardVO = mapper.board_get(bno);

    return boardVO;
}

 

 

 

 

BoardMapper
List<BoardVO> board_getList();

BoardVO board_get(int bno);

 

 

 

BoardMapper
<select id="board_getList" resultType="com.example.domain.BoardVO">
    select * from tbl_board
</select>

<select id="board_get" resultType="com.example.domain.BoardVO">
    select * from tbl_board
    where bno = #{bno}
</select>

 

 

 

 

 

list.html

 

타임리프로 변수 보내는 것에 주의하자!

 

th:href="@{/board/get(bno=${board.bno})}"

 

<a th:each="board : ${boardList}" th:href="@{/board/get(bno=${board.bno})}" class="list-group-item list-group-item-action">
<a th:href="@{/board/register}" class="btn btn-primary">새글 등록하기</a>

 

<div class="container">
    <h1 class="mt-4 text-center">BORA 게시판</h1>
    <div><a th:href="@{/board/register}" class="btn btn-primary">새글 등록하기</a></div>
    <div class="list-group mt-4">
        <a th:each="board : ${boardList}" th:href="@{/board/get(bno=${board.bno})}" class="list-group-item list-group-item-action">
            <div class="d-flex w-100 justify-content-between">
                <h5 class="mb-1" th:text="${board.bno + '. ' + board.title}">게시글 제목</h5>
                <small th:text="${board.regdate}">작성일자</small>
            </div>
            <p class="mb-1" th:text="${board.content}">게시글 내용</p>
            <small th:text="${board.writer}">작성자</small>
        </a>


    </div>
</div>

 

 

 

 

 

 

get.html
<div class="container">
    <h1>게시판 상세 페이지</h1>
    <hr>
    <div class="row">
        <div class="col-md-6">
            <h4>게시물 정보</h4>
            <table class="table">
                <tbody>
                <tr>
                    <th>번호</th>
                    <td th:text="${boardVO.bno}"></td>
                </tr>
                <tr>
                    <th>제목</th>
                    <td th:text="${boardVO.title}"></td>
                </tr>
                <tr>
                    <th>이름</th>
                    <td th:text="${boardVO.writer}"></td>
                </tr>
                <tr>
                    <th>내용</th>
                    <td th:text="${boardVO.content}"></td>
                </tr>
                <tr>
                    <th>날짜</th>
                    <td th:text="${boardVO.regdate}"></td>
                </tr>
                </tbody>
            </table>
            <a href="/board/update" class="btn btn-primary">수정하기</a>
            <a href="/board/list" class="btn btn-warning">목록으로</a>
        </div>
    </div>
</div>

 

 

 

 


 

 

CREATE

 

 

BoardController
@GetMapping("/register")
public void register(){
}

@PostMapping("/register")
public String registerBoardVO(BoardVO boardVO){

    log.info("boardVO : " + boardVO);

    int result = service.board_register(boardVO);

    log.info("등록완료 : " + result);

    return "redirect:/board/list";
}

 

 

BoardService
public int board_register(BoardVO boardVO) {

   int result = mapper.board_register(boardVO);

   return result;
}

 

 

BoardMapper
int board_register(BoardVO boardVO);

 

 

 

BoardMapper.xml
<insert id="board_register" parameterType="com.example.domain.BoardVO">
    insert into tbl_board(bno, title, content, writer)
    values (seq_board.nextval, #{title}, #{content}, #{writer})
</insert>

 

 

 

register.html

 

<form class="mb-4" action="/board/register" method="post">
  <div class="form-group">
    <label for="title">제목</label>
    <input type="text" class="form-control" id="title" name="title" placeholder="제목을 입력하세요">
  </div>
  <div class="form-group">
    <label for="title">작성자</label>
    <input type="text" class="form-control" id="writer" name="writer" placeholder="작성자 입력하세요">
  </div>
  <div class="form-group">
    <label for="content">내용</label>
    <textarea class="form-control" id="content" rows="3" name="content" placeholder="내용을 입력하세요"></textarea>
  </div>
  <button type="submit" class="btn btn-primary">등록하기</button>
  <a href="/board/list" class="btn btn-warning">목록으로</a>
</form>

 

 

 

 

 


 

update

 

 

 

BoardController

 

 

@GetMapping({"/get", "/update"})
public void get(Model model, int bno){

    log.info("bno"+bno);

    BoardVO boardVO = service.board_get(bno);

    model.addAttribute("boardVO", boardVO);

}

 

@PostMapping("/update")
public String updateBoardVO(BoardVO boardVO, Model model){

    log.info("update : " + boardVO);
    int result = service.board_update(boardVO);

    log.info("update result : " + result);

    //model.addAttribute(boardVO1);

    return "redirect:/board/list"; //나중에 수정한화면으로 돌아가게 바꾸기
}

 

 

 

 

 

BoardService
public int board_update(BoardVO boardVO) {

    int result = mapper.board_update(boardVO);

    return result;
}

 

 

BoardMapper
int board_update(BoardVO boardVO);

 

 

 

BoardMapper.xml
<update id="board_update" parameterType="com.example.domain.BoardVO">
    update tbl_board
    set title = #{title}, content = #{content}, writer = #{writer}, updatedate = sysdate
    where bno = #{bno}
</update>

 

 

 

 

 

update.html

 

<div class="container">
    <h1>게시판 수정</h1>
    <form action="/board/update" method="post">
        <div class="form-group">
            <label for="title">제목</label>
            <input type="text" class="form-control" id="title" name="title" th:value="${boardVO.title}">
        </div>
        <div class="form-group">
            <label for="writer">작성자</label>
            <input type="text" class="form-control" id="writer" name="writer" th:value="${boardVO.writer}">
        </div>
        <div class="form-group">
            <label for="content">내용</label>
            <textarea class="form-control" id="content" name="content" rows="5" th:text="${boardVO.content}"></textarea>
        </div>

        <input type="hidden" name="bno" th:value="${boardVO.bno}" />
        <button type="submit" class="btn btn-primary">수정하기</button>
        <button type="reset" class="btn btn-dark">새로쓰기</button>
        <a href="/board/list" class="btn btn-warning">목록으로</a>
    </form>
</div>

 

 

 

 

 


 

delete

 

 

 

 

BoardController
@GetMapping("/delete")   //delete는 Postmapping 필요 없음
public String delete(int bno){

    log.info("bno"+bno);
    int result = service.board_delete(bno);
    log.info("delete result : " + result);

    return "redirect:/board/list";
}

 

 

 

 

get.html  (delete.html 필요없음!!)
<a th:href="@{/board/delete(bno=${boardVO.bno})}" class="btn btn-dark">삭제하기</a>

 

 

BoardService
public int board_delete(int bno) {

    int result = mapper.board_delete(bno);

    return result;
}

 

 

 

BoardMapper
int board_delete(int bno);

 

 

 

BoardMapper.xml
<delete id="board_delete">
    delete from tbl_board
    where bno = #{bno}
</delete>