개발 기록이

MyBatis 자동 증가 키 가져오기 (useGeneratedKeys, keyProperty) 본문

웹 개발/Back-end

MyBatis 자동 증가 키 가져오기 (useGeneratedKeys, keyProperty)

studyingbackhoe 2026. 4. 4. 14:32

MyBatis를 사용할 때 INSERT 이후 생성된 PK 값을 바로 사용해야 하는 경우가 있다.

이때 사용할 수 있는 옵션인 useGeneratedKeys와 keyProperty에 대해 알아보자.

 

1. useGeneratedKeys

DB에서 자동 생성된 키를 가져올지 여부를 설정하는 옵션.

useGeneratedKeys="true"

2. keyProperty

생성된 키 값을 매핑할 객체의 필드명을 지정.

keyProperty="가져오고 싶은 PK 필드명"

 

3. 사용 예시

✔ DB 테이블 생성(MySQL 기준)

CREATE TABLE mybatis_users (
    user_id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50),
    email VARCHAR(100)
);

 

✔ Java 객체

public class User {
    private Integer userId;
    private String name;
    private String email;

    // getter, setter도 생성해주기
}

 

✔ Mapper XML

<insert id="insertUser" useGeneratedKeys="true" keyProperty="userId">
    INSERT INTO users (name, email)
    VALUES (#{name}, #{email})
</insert>

 

Java 실행코드

User user = new User();
user.setName("홍길동");
user.setEmail("test@test.com");

userMapper.insertUser(user);

System.out.println(user.getUserId());

 

INSERT 이후에는 user.getUserId()를 통해 생성된 PK 값을 바로 확인할 수 있다.

기본적으로 useGeneratedKeys는 false이지만, true로 설정하면 DB가 자동으로 생성한 키 값을 함께 가져오고, MyBatis가 이를 user 객체의 id 필드에 자동으로 설정해 준다.

즉, 별도로 PK를 조회하는 로직 없이도, INSERT 이후 바로 userId 값을 사용할 수 있게 된다.

userMapper.insertUser(user);

 

⚠️ 이때 생성된 키는 반환값이 아니라, 전달한 객체(user)에 직접 설정된다.