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
를 괴롭히고 있었을 것이다.
더 좋은 방법이 있다면 수정하겠습니다..😀