티스토리 뷰

MyBatis에서 insert한 자동증가값을 가져오기 위해서는 SelectKey를


사용해서 가져와야 한다.

<selectKey keyProperty="idx" resultType="String" order="AFTER">
   SELECT LAST_INSERT_ID()
</selectKey>

여기서 keyProperty는 auto_increment 값을 저장할 property를

지정해 주면 된다.

MyBatis에서 insert 후 자동증가값을 가져오는 방법을 알아보자

간단히 볼사람은 DAOMAPPER만 봐도 충분하다


테이블 생성


CREATE TABLE `test` (
    `idx`  int AUTO_INCREMENT NOT NULL,
    `name`  varchar(30) NOT NULL ,
    PRIMARY KEY (`idx`)
);


CREATE TABLE `test2` (
    `idx`  int AUTO_INCREMENT NOT NULL ,
    `test_idx`  int,
    PRIMARY KEY (`idx`)
);


JAVA

public class Test {
 public static void main(String[] args) {
  Dao dao = new Dao();
  dao.test();
 }
}


VO

public class TestVO {
 String idx, name;

 public String getIdx() {
  return idx;
 }

 public void setIdx(String idx) {
  this.idx = idx;
 }

 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 } 
}


public class Test2VO {
 String idx, write_idx;

 public String getIdx() {
  return idx;
 }

 public void setIdx(String idx) {
  this.idx = idx;
 }

 public String getWrite_idx() {
  return write_idx;
 }

 public void setWrite_idx(String write_idx) {
  this.write_idx = write_idx;
 }
}



DAO

public class Dao {
 SqlSession ss = null;

 public void test(){
  TestVO vo = new TestVO();
  vo.setName("kim");


  ss = DBService.getFactory().openSession(true);
  ss.insert("test",vo);


  System.out.println("자동증가값 Idx : "+vo.getIdx());
  Test2VO vo2 = new Test2VO();
  vo2.setWrite_idx(vo.getIdx());
  ss.insert("test2",vo2);
  ss.close();
 }
}



MAPPER

<insert id="test" parameterType="com.dh.mybatis.TestVO">
 insert into test values(null,#{name})
  <selectKey keyProperty="idx" resultType="String" order="AFTER">
   SELECT LAST_INSERT_ID()
  </selectKey>

</insert>


<insert id="test2" parameterType="com.dh.mybatis.Test2VO">
 insert into test2 values(null,#{write_idx})
</insert>




댓글