┝ 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>