MyBatisの型エイリアス
定義済みエイリアスは大文字小文字を区別しません
クエリ結果の取得パターン
単一レコード取得時:
- エンティティオブジェクトで受信
- Listコレクションで受信
- Mapオブジェクトで受信
複数レコード取得時:
- Listコレクションで受信
List<Map<String, Object>>で受信@MapKeyアノテーションでキー指定
エンティティオブジェクトによる単一レコード取得
結果が1件の場合のみ有効。複数件取得時はTooManyResultsExceptionが発生
User fetchSingleUser(@Param("userId") Integer userId);
<select id="fetchSingleUser" resultType="User">
SELECT * FROM user_table WHERE user_id = #{userId}
</select>
Listコレクションによるレコード取得
単一/複数件の両方で利用可能
List<User> fetchAllUsers();
<select id="fetchAllUsers" resultType="User">
SELECT * FROM user_table
</select>
単一カラム値の取得
MyBatis組み込みエイリアスを使用
Long countUsers();
<select id="countUsers" resultType="java.lang.Long">
SELECT COUNT(*) FROM user_table
</select>
単一レコードのMap取得
結果形式: {カラム名=値, ...}
Map<String, Object> fetchUserAsMap(@Param("userId") Integer userId);
<select id="fetchUserAsMap" resultType="java.util.HashMap">
SELECT * FROM user_table WHERE user_id = #{userId}
</select>
複数レコードの取得方法
Mapリストによる取得
List<Map<String, Object>> fetchAllAsMapList();
<select id="fetchAllAsMapList" resultType="java.util.HashMap">
SELECT * FROM user_table
</select>
@MapKeyアノテーションの適用
一意のフィールドをキーに各レコードをMap値として取得
@MapKey("userId")
Map<Integer, Object> fetchAllUsersMapped();
<select id="fetchAllUsersMapped" resultType="java.util.HashMap">
SELECT * FROM user_table
</select>