Mybatisで値オブジェクト(DTO)とマッピングする方法

Mybatisで値オブジェクト(DTO)とマッピングする方法

MyBatisで値オブジェクトを扱う方法について説明します。

1. クラスとテーブルの定義

まず、値オブジェクト(DTO)として使用するクラスと、それに対応するテーブルを定義します。
ここでは、test_userテーブルと、それに対応するTestUserクラスを例にします。

// TestUser.java
public class TestUser {
    private Integer id;
    private String name;
    private String email;

    // getters and setters
}
-- test_user テーブルの作成
CREATE TABLE test_user (
    id INT PRIMARY KEY,
    name VARCHAR(100),
    email VARCHAR(100)
);

2. マッパーXMLの設定

次に、MyBatisのマッパーXMLファイルで、TestUserクラスを使用してSQLを定義します。
test_userテーブルからデータを取得するためのselect文を設定します。

<!-- TestUserMapper.xml -->
<mapper namespace="com.example.TestUserMapper">
    <resultMap id="testUserResultMap" type="TestUser">
        <id property="id" column="id"/>
        <result property="name" column="name"/>
        <result property="email" column="email"/>
    </resultMap>

    <select id="selectUserById" parameterType="Integer" resultMap="testUserResultMap">
        SELECT * FROM test_user WHERE id = #{id}
    </select>
</mapper>

3. マッパーインターフェースの定義

次に、マッパーインターフェースを定義します。
これにより、マッパーXMLで定義したSQLを呼び出すことができます。

// TestUserMapper.java
public interface TestUserMapper {
    TestUser selectUserById(Integer id);
}

4. MyBatisの設定

最後に、MyBatisの設定を行い、SQLセッションを使ってデータベースにアクセスします。

// MyBatisConfig.java
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.InputStream;

public class MyBatisConfig {
    private static SqlSessionFactory sqlSessionFactory;

    static {
        String resource = "mybatis-config.xml";
        InputStream inputStream = TestUserMapper.class.getClassLoader().getResourceAsStream(resource);
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    }

    public static SqlSession getSqlSession() {
        return sqlSessionFactory.openSession();
    }
}
<!-- mybatis-config.xml -->
<configuration>
    <mappers>
        <mapper resource="com/example/TestUserMapper.xml"/>
    </mappers>
</configuration>

これで、TestUserクラスを値オブジェクトとして扱う準備が整いました。
TestUserMapperインターフェースのメソッドを使って、test_userテーブルからデータを取得できます。