useGeneratedKeys
MyBatis์ ๋งคํผ XML์์ย useGeneratedKeys์ย keyPropertyย ์์ฑ์ ์ค์ ํ์ฌ,ย INSERTย ์คํ ํ์ ์๋์ผ๋ก ์ฆ๊ฐ๋ ํค ๊ฐ์ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
<!-- UserMapper.xml -->
<insert id="insertUser" parameterType="User" useGeneratedKeys="true" keyProperty="id">
INSERT INTO User (name, email) VALUES (#{name}, #{email})
</insert>
Java
๋ณต์ฌ
1. ํ ์ด๋ธ ์ค์
MySQL์์ย AUTO_INCREMENT๋ฅผ ์ฌ์ฉํ๋ ํ
์ด๋ธ์ด ์์ด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ดย idย ์ปฌ๋ผ์ด ๊ธฐ๋ณธ ํค์ด๋ฉฐ ์๋ ์ฆ๊ฐ๋๋ย Userย ํ
์ด๋ธ์ ๊ฐ์ ํ๊ฒ ์ต๋๋ค.
sql
์ฝ๋ ๋ณต์ฌ
CREATE TABLE User (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
email VARCHAR(50)
);
SQL
๋ณต์ฌ
2. Mapper XML ์ค์
MyBatis์ ๋งคํผ XML์์ย useGeneratedKeys์ย keyPropertyย ์์ฑ์ ์ค์ ํ์ฌ,ย INSERTย ์คํ ํ์ ์๋์ผ๋ก ์ฆ๊ฐ๋ ํค ๊ฐ์ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
xml
์ฝ๋ ๋ณต์ฌ
<!-- UserMapper.xml --><insert id="insertUser" parameterType="User" useGeneratedKeys="true" keyProperty="id">
INSERT INTO User (name, email) VALUES (#{name}, #{email})
</insert>
XML
๋ณต์ฌ
โข
useGeneratedKeys: MyBatis์๊ฒ ์์ฑ๋ ํค๋ฅผ ๊ฐ์ ธ์ค๋๋ก ์ค์ ํฉ๋๋ค.
โข
keyProperty: ๋ฐํ๋ ์๋ ์ฆ๊ฐ ํค๋ฅผ ๋งคํํ ๊ฐ์ฒด์ ์์ฑ ์ด๋ฆ์ ์ง์ ํฉ๋๋ค. ์ฌ๊ธฐ์๋ย Userย ๊ฐ์ฒด์ย idย ํ๋๊ฐ ์๋ ์ฆ๊ฐ๋ ๊ฐ์ ๋ฐ๋๋ก ์ค์ ํฉ๋๋ค.
3. User ํด๋์ค ์์ฑ
Userย ํด๋์ค์ย id,ย name,ย emailย ์์ฑ์ ์ ์ํฉ๋๋ค.
java
์ฝ๋ ๋ณต์ฌ
public class User {
private Integer id;// PK ํ๋private String name;
private String email;
// Getter, Setter ์๋ต
}
Java
๋ณต์ฌ
4. Mapper ์ธํฐํ์ด์ค ์์ฑ
MyBatis ๋งคํผ ์ธํฐํ์ด์ค์ย insertUserย ๋ฉ์๋๋ฅผ ์ ์ธํฉ๋๋ค.
java
์ฝ๋ ๋ณต์ฌ
@Mapper
public interface UserMapper {
void insertUser(User user);
}
Java
๋ณต์ฌ
5. ์๋น์ค์์ ํธ์ถํ๊ธฐ
์๋น์ค ๊ณ์ธต์์ย insertUserย ๋ฉ์๋๋ฅผ ํธ์ถํ ํย user.getId()๋ฅผ ํตํดย AUTO_INCREMENT๋ ํค ๊ฐ์ ํ์ธํ ์ ์์ต๋๋ค.
java
์ฝ๋ ๋ณต์ฌ
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public Integer createUser(String name, String email) {
User user = new User();
user.setName(name);
user.setEmail(email);
userMapper.insertUser(user);
// INSERT ํ ์๋ ์ฆ๊ฐ๋ PK ๊ฐreturn user.getId();
}
}
Java
๋ณต์ฌ
์ฃผ์ ์ฌํญ
โข
MyBatis ๋ฒ์ ์ ๋ฐ๋ผย useGeneratedKeysย ์ต์
์ ์ง์ํ์ง ์์ ์ ์์ผ๋ฏ๋ก, ์ต์ ๋ฒ์ ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
โข
MySQL ์ด์ธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์๋ ์ ์ฌํ ์ค์ ์ผ๋ก ์ ์ฉํ ์ ์์ง๋ง, ๊ฐ DBMS์ ํค ์์ฑ ๋ฐฉ์์ ๋ฐ๋ผ ์ถ๊ฐ ์ค์ ์ด ํ์ํ ์ ์์ต๋๋ค.
์ด๋ ๊ฒ ์ค์ ํ๋ฉด MyBatis๊ฐย INSERTย ํ์ ์๋์ผ๋ก ์ฆ๊ฐ๋ ๊ธฐ๋ณธ ํค ๊ฐ์ย Userย ๊ฐ์ฒด์ย idย ํ๋์ ์ฑ์์ฃผ๊ฒ ๋ฉ๋๋ค.