mybatisでのresultTypeとresultMapの使用の違い



Difference Between Use Resulttype



mybatisのselect要素には、resultTypeとresultMapの2つの属性があり、単一テーブルのクエリマッピングまたは複数テーブルのユニオンクエリマッピングの要件を満たすことができます。

javaBean



package com.someapp.model public class User { private int id private String username private String hashedPassword public int getId() { return id } public void setId(int id) { this.id = id } public String getUsername() { return username } public void setUsername(String username) { this.username = username } public String getHashedPassword() { return hashedPassword } public void setHashedPassword(String hashedPassword) { this.hashedPassword = hashedPassword } }

resultTypeを使用する

select id, username, hashedPassword from some_table where id = #{id}

このような場合、MyBatisはバックグラウンドでResultMapを自動的に作成し、プロパティ名に基づいて列をJavaBeanのプロパティにマッピングします。列名が完全に一致しない場合は、列名のselect句のエイリアス(基本的なSQL機能)を使用してタグを一致させることができます。といった:

select user_id as 'id', user_name as 'userName', hashed_password as 'hashedPassword' from some_table where id = #{id}

resultMapを使用する

select user_id, user_name, hashed_password from some_table where id = #{id}

resultTypeとresultMapの両方がUserオブジェクトにマップされます。



違い、resultTypeおよびrestltMap

  • 1. Javaオブジェクトの属性に対応して、大文字と小文字は区別されません。
  • 2. java.lang.Mapを配置する場合、keyはクエリステートメントの列名、valueはクエリの値、大文字と小文字を区別します
  • 3.resultMap:定義されたIDを参照し、定義されたresyltTypeへの参照です
    注:resultTypeを使用する場合は、結果セットの列名がjavaオブジェクトのプロパティと同じであることを確認してください。ただし、resultMapは使用されず、resultMapはtypeHanderで変換できます。
  • 4.type:javaオブジェクトに対応するクラス、id:このファイル内で一意になる列:データベースの列名またはエイリアス、property:javaオブジェクトのプロパティに対応するjdbcType:java.sql.Types
    クエリステートメントで、resultMap属性は上記の属性のタグのIDを指します。
    parameterType:パラメータータイプ。1つのパラメーターのみを渡すことができます。クラスへのカプセル化など、カプセル化するパラメーターが複数ある場合は、パッケージ名とクラス名を書き込むために、基本データ型を省略できます。
  • 5. 1対1、1対多のペアの場合、テーブルのフィールドが同じであれば、エイリアスを記述する必要があります。そうしないと、クエリ結果を正常にマッピングできません。特定の属性が空であるか、返される結果が想像と異なる場合、これは報告されないことがよくあります。
  • 6.事故でエラーが発生した場合は、上記の点を繰り返し確認し、SQLステートメントを注意深く確認してください。mapper.xmlファイルが正しく構成されています。

また、myBatisで最も重要で強力な要素であるresultMap要素もあります。これは、カスケードクエリ、キャッシュなどを提供します。


参照https://blog.csdn.net/leo3070/article/details/77899574?utm_source=copy