[Mybatis] 자동 증가 키 지원(Sequence, Identity) 예제

MyBatis는 자동 증가 키(Sequence 또는 Identity)를 지원하기 위한 다양한 방법을 제공합니다. 아래는 시퀀스(Sequence)와 아이덴티티(Identity)를 사용한 예제입니다.

예제 1: 시퀀스(Sequence) 사용

  1. 매퍼 XML 파일 작성:
<!-- UserMapper.xml -->
<mapper namespace="com.example.UserMapper">
    <insert id="insertUser" parameterType="User">
        <!-- 시퀀스를 사용한 자동 증가 키 지원 -->
        <selectKey keyProperty="id" resultType="Long" order="BEFORE">
            SELECT your_sequence.nextval FROM dual
        </selectKey>
        INSERT INTO users (user_id, username, email) VALUES (#{id}, #{username}, #{email})
    </insert>
</mapper>` 

위의 예제에서는 Oracle DB를 예로 들고 있으며, 시퀀스를 사용하여 자동 증가 키를 생성하고 삽입합니다. <selectKey> 요소를 사용하여 시퀀스 값을 얻어옵니다.

  1. Java 코드에서 호출:
public class Main {

    public static void main(String[] args) {
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        try (SqlSession sqlSession = sessionFactory.openSession()) {
            UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
            
            User user = new User();
            user.setUsername("example");
            user.setEmail("example@example.com");
            
            // insertUser 메서드 호출 시 자동 증가 키가 생성됨
            int rowsInserted = userMapper.insertUser(user);
            
            System.out.println("Rows Inserted: " + rowsInserted);
            System.out.println("Generated ID: " + user.getId());
        }
    }
}` 

위의 Java 코드에서는 insertUser 메서드를 호출하여 사용자(User)를 데이터베이스에 삽입합니다. 이때 자동 증가 키가 생성되고, 이 키는 사용자 객체의 id 필드에 설정됩니다.

예제 2: 아이덴티티(Identity) 사용

  1. 매퍼 XML 파일 작성:
<!-- UserMapper.xml -->
<mapper namespace="com.example.UserMapper">
    <insert id="insertUser" parameterType="User">
        <!-- 아이덴티티 컬럼을 사용한 자동 증가 키 지원 -->
        INSERT INTO users (username, email) VALUES (#{username}, #{email})
    </insert>
</mapper>` 

위의 예제에서는 MySQL과 같은 데이터베이스에서 아이덴티티 컬럼을 사용하여 자동 증가 키를 생성하고 데이터를 삽입합니다. 데이터베이스가 아이덴티티를 지원하는 경우, MyBatis는 자동으로 생성된 키 값을 사용자 객체에 설정합니다.

  1. Java 코드에서 호출:
public class Main {

    public static void main(String[] args) {
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        try (SqlSession sqlSession = sessionFactory.openSession()) {
            UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
            
            User user = new User();
            user.setUsername("example");
            user.setEmail("example@example.com");
            
            // insertUser 메서드 호출 시 자동 증가 키가 생성되며, 사용자 객체에 설정됨
            int rowsInserted = userMapper.insertUser(user);
            
            System.out.println("Rows Inserted: " + rowsInserted);
            System.out.println("Generated ID: " + user.getId());
        }
    }
}` 

위의 Java 코드에서도 insertUser 메서드를 호출하여 사용자(User)를 데이터베이스에 삽입합니다. 이때 아이덴티티 컬럼을 사용하여 자동 증가 키가 생성되고, 이 키는 사용자 객체의 id 필드에 설정됩니다.

자동 증가 키 지원은 다양한 데이터베이스에서 작동하며, MyBatis는 이러한 기능을 효과적으로 처리할 수 있습니다. 단지 데이터베이스가 어떤 방식을 사용하는지 확인하고 그에 맞게 설정하면 됩니다.