Mybatisの取得結果をオブジェクトにマッピングする方法

Mybatisの取得結果をオブジェクトにマッピングする方法

MyBatisで取得結果をオブジェクトにマッピングする方法について説明します。
以下はtest_userというテーブルと、TestUserというクラスを使った例です。

1. MyBatisのマッピングの概要

MyBatisはSQLクエリの結果をJavaオブジェクトにマッピングするためのフレームワークです。
この機能により、データベースから取得したデータをプログラム内で扱いやすい形に変換できます。
マッピングには主に以下の方法があります。

2. クエリとマッピングの設定

MyBatisでは、クエリとマッピングの設定をXMLファイルまたはアノテーションを使って行います。
以下はXMLを使った設定方法の一例です。

  • Mapper XMLファイルの設定

Mapper XMLファイルでselectタグを使用してSQLクエリを定義します。
このクエリの結果をTestUserクラスにマッピングします。
以下はその設定の例です。

<select id="getUserById" parameterType="int" resultType="TestUser">
    SELECT id, name, email
    FROM test_user
    WHERE id = #{id}
</select>

上記のselectタグのid属性にはメソッド名を指定し、parameterTypeにはSQLクエリに渡すパラメータの型を指定します。
resultTypeにはマッピングするオブジェクトのクラスを指定します。

3. TestUserクラスの定義

次に、データベースのレコードをマッピングするためのTestUserクラスを定義します。
このクラスのフィールドはテーブルのカラムと一致させる必要があります。

public class TestUser {
    private int id;
    private String name;
    private String email;

    // ゲッターとセッター
    public int getId() { return id; }
    public void setId(int id) { this.id = id; }

    public String getName() { return name; }
    public void setName(String name) { this.name = name; }

    public String getEmail() { return email; }
    public void setEmail(String email) { this.email = email; }
}
4. Mapperインターフェースの定義

Mapperインターフェースでは、XMLで定義したSQLクエリを呼び出すメソッドを宣言します。
例えば、getUserByIdメソッドを次のように定義します。

public interface UserMapper {
    TestUser getUserById(int id);
}
5. マッピングの動作確認

実際にマッピングが正しく行われるかどうかを確認するためには、MyBatisのSqlSessionを使ってMapperを取得し、クエリを実行します。

try (SqlSession session = sqlSessionFactory.openSession()) {
    UserMapper mapper = session.getMapper(UserMapper.class);
    TestUser user = mapper.getUserById(1);
    System.out.println(user.getName());
}

これで、test_userテーブルから取得したレコードがTestUserクラスのインスタンスとしてマッピングされ、Javaコード内で利用できるようになります。