본문 바로가기
Spring/게시판프로젝트

[Spring] 게시판 프로젝트4 - Persistence 계층 구현 (insert,delete,update)

by 태옹 2021. 7. 3.

게시물 등록 - insert

1. BoardMapper.java에 메소드 추가

package com.taeong.mapper;

import java.util.List;

import com.taeong.domain.BoardVO;

public interface BoardMapper {
	public List<BoardVO> getList();
    
	// 아래 insert메소드들 추가
	public void insert(BoardVO board);	
	public void insertSelectKey(BoardVO board); 
}
  • insert() : 단순히 시퀀스의 다음 값을 구해서 insert할 때 사용
  • insertSelectKey() : @SelectKey라는 MyBatis의 어노테이션을 사용
    • @SelectKey는 주로 PK값을 미리 SQL을 통해서 처리해두고 KeyProperty속성에 지정한 이름으로 결과를 보관하는 방식
    • 쿼리문에서 #{bno}와 같이 이미 처리된 결과를 이용

 

2. BoardMapper.xml에 SQL작성

 

(1) insert()의 sql문 구현

<insert id="insert">
    insert into tbl_board (bno, title, content, writer)
    values (seq_board.nextval, #{title}, #{content}, #{writer})
</insert>

mysql문법

더보기
<insert id="insert" useGeneratedKeys="true" keyProperty="bno">
    insert into tbl_board (title, content, writer)
    values (#{title}, #{content}, #{writer})
</insert>

 

(2) insertSelectKey()의 sql문 구현

<insert id="insertSelectKey">
    <selectKey keyProperty="bno" order="BEFORE" resultType="long">
        select seq_board.nextval from dual
    </selectKey>
    insert into tbl_board (bno, title, content, writer)
    values (#{bno}, #{title}, #{content}, #{writer})
</insert>

 

(3) BoardMapperTests.java에서 테스트

@Test
public void testInsert() {
    BoardVO board = new BoardVO();

    board.setTitle("새로 작성하는 글");
    board.setContent("새로 작성하는 내용");
    board.setWriter("태옹");

    mapper.insert(board);

    log.info(board);
}

 


게시물 삭제 - delete

1. BoardMapper.java

//delete
public int delete(Long bno);	
//리턴타입이 int인 이유는 제대로 작업이 처리된 경우 1을 리턴하는지 확인하기 위함!

 

2. BoardMappr.xml

<delete id="delete">
	delete tbl_board where bno = #{bno}
</delete>

 

3. BoardMapperTests.java

@Test
public void testDelete() {
	log.info("DELETE COUNT : "+mapper.delete(5L));
}

 


게시물 수정 - update

 

1. BoardMapper.java

//update
public int update(BoardVO board);
//리턴타입이 int인 이유는 제대로 작업이 처리된 경우 1을 리턴하는지 확인하기 위함!

 

2. BoardMappr.xml

<update id="update">
	update tbl_board
	set title= #{title},
	content=#{content},
	writer = #{writer},
	updateDate = sysdate
	where bno = #{bno}
</update>

업데이트 할 때는 updateDate를 현재시간으로 수정함

regdate는 수정하지 않기!

 

 

3. BoardMapperTests.java

@Test
public void testUpdate() {
    BoardVO board = new BoardVO();

    // 실행 전 존재하는 번호인지 확인할 것!
    board.setBno(1L);
    board.setTitle("수정하는 글");
    board.setContent("수정된 내용");
    board.setWriter("태옹");

    log.info("UPDATE COUNT : "+mapper.update(board));
}

댓글