MyBatis の SQL マッピング ファイルで結果マッピングを構成する方法

MyBatis の SQL マッピング ファイルで結果マッピングを構成する方法

序文

MyBatis は優れた ORM フレームワークであり、SQL ステートメントと結果マッピング ルールを定義するためのさまざまな構成方法を提供します。その中でも、SQL マッピング ファイルは MyBatis で最もよく使用される設定方法の 1 つであり、XML ファイルを通じて SQL ステートメントと結果のマッピング ルールを定義するため、非常に便利で柔軟に使用できます。この記事では、MyBatis の SQL マッピング ファイルが一般的な型、コレクション型、その他の状況を含む結果マッピングを構成する方法を紹介します。

ここに画像の説明を挿入

基本的な文法

MyBatis の SQL マッピング ファイルでは、<resultMap>タグを使用して結果マッピング ルールを定義できます。次に例を示します。

<!-- 定义用户结果映射规则 -->
<resultMap id="userResultMap" type="com.example.model.User">
  <id property="id" column="id" />
  <result property="username" column="username" />
  <result property="password" column="password" />
</resultMap>

上の例では、<resultMap>タグを使用してuserResultMapという名前の結果マッピング ルールを定義しています。ここで、id属性はルールの一意の識別子を指定するために使用され、type属性はルールが適用される Java タイプを指定するために使用され、<id>タグ<result>はオブジェクトのプロパティとデータベース フィールドとのマッピング関係を定義するために使用されます。

このうち、<id>ラベルは主キーフィールドの定義に使用され、propertyプロパティはJavaオブジェクトのプロパティ名の指定に、columnプロパティはデータベーステーブルのフィールド名の指定に使用されます。<result>タグは通常のフィールドを定義するために使用され、その属性は<id>主キー フィールドを指定する必要がないことを除いてタグと同じです。

結果マッピング ルールを定義した後、SQL ステートメント内のラベルを使用して<resultMap>ルールを参照できます。次に例を示します。

<!-- 查询用户列表 -->
<select id="selectUsers" resultMap="userResultMap">
  SELECT * FROM users
</select>

上の例では、resultMap属性を使用して返された結果のマッピング ルールを指定し、この属性の値は の前に定義されていますuserResultMap

レギュラータイプ

SQL ステートメントが従来の型 (文字列、整数、浮動小数点数など) を返す場合、resultType属性を使用して戻り値の型を指定できます。次に例を示します。

<!-- 查询用户数量 -->
<select id="countUsers" resultType="int">
  SELECT COUNT(*) FROM users
</select>

上の例では、resultType属性を使用して戻り値のタイプを指定しますint。これは、整数を返すことを意味します。

コレクションタイプ

SQL ステートメントがコレクション型を返す場合、resultType属性を使用してコレクション内の要素の型を指定できます。次に例を示します。

<!-- 查询用户列表 -->
<select id="selectUsers" resultType="com.example.model.User">
  SELECT * FROM users
</select>

上の例では、resultType属性を使用して戻り値のタイプを指定しますcom.example.model.User。これは、User オブジェクトのリストを返すことを意味します。

属性の使用に加えてresultType、タグを使用してコレクション型のマッピング ルールを定義することもできます<collection>。次に例を示します。

<!-- 定义用户结果映射规则 -->
<resultMap id="userResultMap" type="com.example.model.User">
  <id property="id" column="id" />
  <result property="username" column="username" />
  <result property="password" column="password" />
  <collection property="orders" ofType="com.example.model.Order">
    <id property="id" column="order_id" />
    <result property="name" column="order_name" />
  </collection>
</resultMap>

上の例では、<collection>タグを使用してordersという名前の順序リストを定義しています。ここで、property属性は Java オブジェクトのプロパティ名を指定するために使用され、ofType属性はコレクション内の要素のタイプを指定するために使用され、<id>タグ<result>はオブジェクトのプロパティと、それらの間のデータベース フィールドのマッピング関係を定義するために使用されます。

動的SQL

実際の開発では、条件に応じて異なるSQL文を生成する必要がある場合がありますが、その際にはMyBatisが提供する動的SQL機能を利用することができます。動的 SQL は、if、choose、when、otherwise、trim、where、set、foreach およびその他のラベルを含む条件に従って SQL ステートメントを動的に生成できます。動的 SQL では、<resultMap>タグを使用して結果マッピング ルールを定義することもできます。次に例を示します。

<!-- 根据用户名和密码查询用户 -->
<select id="selectUserByUsernameAndPassword" resultMap="userResultMap">
  SELECT * FROM users
  <where>
    <if test="username != null">
      AND username = #{username}
    </if>
    <if test="password != null">
      AND password = #{password}
    </if>
  </where>
</select>

上記の例では、<if>ラベルを使用してパラメータが空かどうかを判断し、空でない場合は対応する SQL ステートメントを生成します。ラベルは、<where>SQL ステートメント内の WHERE キーワードを自動的に結合し、冗長な AND/OR キーワードを削除するために使用されます。 。SQL ステートメントが実行されると、MyBatis はuserResultMap以前に定義された内容に従ってクエリ結果を User オブジェクトにマップします。

結論は

この記事の導入により、MyBatis の SQL マッピング ファイルで結果マッピング ルールを構成する方法を学びました。従来型、コレクション型、動的 SQL のいずれであっても、MyBatis は結果マッピングの定義をサポートするために対応するタグと属性を提供します。実際の開発では、特定のビジネス要件とデータ モデルに従って、さまざまな結果マッピング ルールを定義することでクエリ結果を対応する Java オブジェクトにマッピングし、データ操作とビジネス処理を容易にすることができます。

おすすめ

転載: blog.csdn.net/2302_77835532/article/details/131654171