woniper

[mybatis] insert 후 key값 반환 본문

Framework

[mybatis] insert 후 key값 반환

woniper1 2014. 5. 7. 13:49

mybatis를 사용해 개발 하다가 insert한 데이터에 대한 key를 얻어야하는 경우가 생겼다. 고민 해봤지만 insert 후 다시 select를 해서 key를 얻어 와야겠다고 생각했다.

하지만 이 방법은 몇가지 문제가 있다고 생각이 들었다.

- key값 하나를 얻기 위해 쿼리를 2번 수행해야 하는 문제.

- unique한 값을 알지 못했을 경우 정확한 key를 얻기 힘들다.(조건절 사용)



1. 흐름

1) insert를 하기 위해 mapper에 parameter로 dto객체를 넘긴다.

2) dto객체를 받은 mapper는 insert 쿼리를 수행한다.

3) insert쿼리 완료 후 parameter로 받은 dto객체에 key값을 set(입력)한다.

4) dto객체에서 key값을 사용한다.

2. dto

package com.woniper.spring.dto;

import java.io.Serializable;

public class UserDto implements Serializable {

	private static final long serialVersionUID = -7948360071399248554L;
	
	private long key;
	private String id;  //사용자 아이디
	private String name;  // 사용자 이름
	public long getKey() {
		return key;
	}
	public void setKey(long key) {
		this.key = key;
	}
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
}

3. mapper





	
	   insert into USER(id, name) values(#{id}, #{name})
	

useGeneratedKeys="true" : insert 후 key 생성 여부

keyProperty="key" : key 저장 property

keyColumn="key"  : key 저장 column

Comments