┝ DB/┝ RDBMS

[mySQL] auto increment된 키 값 바로 받아오는 세가지 방법 (param, vo, map)

홍호나 2024. 10. 16. 22:22

1. param : 값 하나만 받아올 때

 controller.java

AtomicLong generatedKey = new AtomicLong();

myMapper.insertData(name, generatedKey.get());
System.out.println("Generated Key: " + generatedKey.get()); // 여기!

이 때 Wrapper 클래스로 값을 받아오는 것이 유의할 점.

* Wrapper 객체
기본형=원시타입=primitive type의 데이터를 Object=객체로 바꿀 때 사용한다.
int → Integer
char → Character
...

 

▼ mapper.java

import org.apache.ibatis.annotations.Param;

public interface MyMapper {
    void insertData(@Param("name") String name, @Param("generatedKey") Long generatedKey);
}

 

mapper.xml

<insert id="insertData" parameterType="map" useGeneratedKeys="true" keyProperty="generatedKey">
    INSERT INTO my_table (name) VALUES (#{name})
</insert>

2. vo

 controller.java

userVo.setName("kim");
mapper.addUser(userVo);

userNo = userVo.getUSER_NO(); // 여기!

▼ mapper.java

int addUser(UserVo vo);

 mapper.xml

<insert id="addUser" parameterType="....user.vo.UserVo" useGeneratedKeys="true" keyProperty="USER_NO">

 


3. map

자동 생성된 값이 자동으로 map에 들어간다.

 controller.java

import java.util.HashMap;
import java.util.Map;

public class MyService {
    public void insertAndGetGeneratedKey(MyMapper myMapper) {
        Map<String, Object> params = new HashMap<>();
        params.put("name", "Sample Name");

        myMapper.insertData(params);
        System.out.println("Generated Key: " + params.get("id")); // 여기!
    }
}

 

 mapper.xml

<insert id="insertData" parameterType="map" useGeneratedKeys="true" keyProperty="id">
    INSERT INTO my_table (name) VALUES (#{name})
</insert>