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 オブジェクトにマッピングし、データ操作とビジネス処理を容易にすることができます。