[MyBatis] insert 후 자동 증가 키값 사용하기

SoonMin·2021년 4월 15일
0

☀️Mysql 방식☀️😎



CREATE TABLE CONTENT
(
	content_id INT(10) NOT NULL AUTO_INCREMENT,
	name VARCHAR(50) NOT NULL,
	content LONGTEXT NOT NULL
	PRIMARY KEY (id),
);

테이블이 위와 같다면..

<xml방식>

<insert id="insertContent" userGenerateKeys="true" keyProperty="content_id">
		insert into content values (0,#{name},#{content})
</insert>

<Annotation방식>

@Insert("INSERT INTO CONTENT VALUES (0,#{name},#{content})")
@Options(userGeneratedKeys = true, keyProperty = "content_id")
void addContent(contentDTO dto);

위 코드의 동작 방식은 insert가 된 후에 dto에 증가된 key값을 넣어주는 것이다.

(처음 파라미터로 들어온 dto객체의 주소가 변하지 않고 해당 key값이 1증가한 상태로 돌아감.)


만약 위와같은 방식으로 증가된 key값을 얻을수 없다면 어떻게 해야할까?

(위 예제코드와 관련없는 예시이다.)

<service>

public int addContentInfo(ContentDTO writeContentDTO,int board_info_idx) {

		boardDAO.addContentInfo(writeContentDTO); // insert완료
		
		List<ContentDTO> contentList = boardDAO.getContentList(board_info_idx);
		
		writeContentDTO = contentList.get(0);
		int content_idx = writeContentDTO.getContent_idx();

		return content_idx;	
	}
	<controller>

		boardService.addContentInfo(writeContentDTO); 
		int content_idx = writeContentDTO.getContent_idx();
	
		model.addAttribute("content_idx",content_idx);
		model.addAttribute("board_info_idx",writeContentDTO.getContent_board_idx());

		return "board/write_success";



보통 insert후에 자동 생성키의 값이 필요한 경우는 아마 글을 작성하고 내가 쓴 글을 보는 상황일 것이다.


그런데 insert가 끝나고 난 후에 db에 저장된 key값을 바로 꺼내올 방법이 service에서 insert를 담당하고 있는 부분에 db에 값이 저장이 된 후 제일 최근 게시글 레코드를 불러오는 service가 또 필요했다.


결국 저 코드로 인해 나는 db를 두번이나 건드린것이다.


만약 수많은 데이터가 있었다면 게시글 한 번 작성할때마다 db조회를 하면서 db를 괴롭히고 있었을 것이다.





더 좋은 방법이 있다면 수정하겠습니다..😀

0개의 댓글