MyBatisの中でresultTypeとresultMapの違いは何ですか?
MyBatisでは、resultTypeとresultMapは、クエリ結果のマッピング方法を指定するために使用されますが、以下の違いがあります:
- resultTypeは、検索結果のマッピングタイプを指定するためのものです。Javaの基本型、JavaBean、またはコレクション型を指定することができます。検索結果が1つのフィールドのみの場合は、resultTypeを使用してマッピングタイプを指定できます。例えば:
-
を日本語で表現すると、以下のようになります: - 複数のフィールドが含まれるクエリ結果の場合、resultTypeを使用してマッピングすることはできません。代わりにresultMapを使用する必要があります。
- resultMapはクエリ結果のマッピングルールを定義するために使用されます。クエリ結果のフィールドとJavaオブジェクトのプロパティをマッピングするカスタムルールを作成することができます。resultMapはMapper XMLファイルで定義する必要があります。例えば:
-
- 上記の例では、resultMapはuserResultMapというidでマッピングルールを定義し、クエリ結果のフィールドuser_id、user_name、user_ageとUserオブジェクトのid、name、ageプロパティのマッピング関係を指定しています。select文でresultMap属性を使用して、このマッピングルールを参照します。複数のフィールドが含まれ、複雑なマッピング関係処理が必要な場合は、resultMapを使用することができます。
このように、resultTypeは簡単なクエリ結果のマッピングに適しており、一方、resultMapは複雑なクエリ結果のマッピングに適しています。