【Spring Boot】XML設定ファイルを利用したデータベース操作の実装(1)

XML 構成ファイルを使用してデータベース操作を実装する (1)

1.SQLマッピングファイル

SQL マッピング ファイルは、通常マッパーと呼ばれるものです。

1.1 Mapper.xmlの構造

Mapper.xml ファイルの構造を詳しく紹介します。まず完全な mapper.xml の例を見てください。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.Mapper.StudentMapper">
    <select id="selectAll" resultMap="BaseResultMap">
        SELECT
        *
        FROM student
    </select>

    <resultMap id="BaseResultMap" type="com.example.demo.model.Student">
        <id column="id" property="id" jdbcType="BIGINT" />
        <result column="name" property="name" jdbcType="VARCHAR" />
        <result column="sex" property="sex" javaType="INTEGER" />
        <result column="age" property="age" jdbcType="INTEGER" />
    </resultMap>
</mapper>

上の例に示されているように、通常、mapper.xml は主に 4 つの部分に分かれています。

1) mapper.xml の構文宣言で MyBatis 構文を宣言します。

2) 名前空間を介して、mapper.xml ファイルに対応する Mapper インターフェイスを指定します。

3) XML タグを通じてインターフェースのメソッドに対応する SQL ステートメントを定義します。id 属性は Mapper インターフェースのメソッドに対応し、resultMap 属性は戻り値の型になります。

4)<resultMap>ラベルは、返された結果の型とデータベース テーブル構造の間の対応を定義します。上記のマッピングは Student エンティティ クラス オブジェクトです。

1.2 mapper.xmlのタグ

mapper.xml マッピング ファイルには、非常に実用的なタグがいくつか用意されており、その中でより一般的に使用されるタグには、resultMap、sql、insert、update、delete、select およびその他のタグが含まれます。水を得た魚のように MyBatis を使用できるように、タグの使用に習熟してください。MyBatis のタグと機能の説明を表に示します。

ここに画像の説明を挿入します

2. SQL ステートメントを定義する

MyBatis は、SQL ステートメントを定義するために、挿入、更新、削除、および削除の 4 つのタグを提供します。次にSQL文から各タグの使い方を紹介していきます。

2.1 選択

Select は MyBatis でよく使用される要素の 1 つで、MyBatis ではクエリと結果のマッピングが大幅に改善されました。単純なクエリの select 要素は、次のように非常に単純です。

<select id="selectOne" resultType="hashmap" parameterType="Long">
    SELECT name,age FROM student WHERE id = #{
    
    id}
</select>

上の例では、学生の名前と年齢が ID によってクエリされます。定義されたメソッドは selectOne という名前で、Long 型パラメータを受け取り、HashMap 型オブジェクトを返します。HashMap のキーは列名で、値は結果セット内の対応する値です。#{id} は渡されるパラメータ記号です。

select タグを使用すると、パラメーター タイプ、戻り値のタイプなど、各ステートメントの動作の詳細を構成する多くの属性を構成できます。含まれる属性を表に示します。

属性 説明する
ID このステートメントを参照するために使用される名前空間内の一意の識別子
パラメータの種類 ステートメントに渡されるパラメータのデータ型 (オプション)。MyBatis はステートメントで渡されるパラメータのデータ型をタイプ ハンドラー (TypeHandler) を通じて推測できるため、デフォルト値は未設定 (unset) です。
結果の種類 返された結果のデータ型。コレクションが返される場合、コレクション自体の型ではなく、コレクションに含まれる型に設定する必要があることに注意してください。resultType と resultMap のうちの 1 つだけを使用できます
結果マップ 結果マッピング、resultMap は MyBatis の強力な機能の 1 つであり、resultType と resultMap の間で使用できるのは 1 つだけです
フラッシュキャッシュ キャッシュをクリアするかどうか。Select ステートメントのデフォルト値は false です。true に設定すると、ステートメントが呼び出されている限り、ローカル キャッシュと 2 次キャッシュがクリアされます。
キャッシュを使用する キャッシュを使用するかどうか。デフォルト値は tue で、このステートメントのクエリ結果をキャッシュします。
タイムアウト タイムアウト。データベースがリクエスト結果を返すまでの待機時間です。デフォルト値は未設定です
フェッチサイズ 返される結果の行数を設定します。デフォルト値は未設定です
ステートメントの種類 SQL ステートメントを実行するには、Statement、PreparedStatement、または CallableStatement を使用します。デフォルト値は PREPARED です。
結果セットの種類 FORWARD_ONLY、SCROLL_SENSITIVE、SCROLL_INSENSITIVE、または DEFAULT (未設定と同等)、デフォルト値は DEFAULT
データベースID データベース ベンダー ID (databaseldProvider): この属性が設定されている場合、MyBatis は、databaseId を持たない、または現在の databaseId に一致しないすべてのステートメントをロードします。
結果注文済み ネストされた結果選択ステートメントの場合、デフォルト値は false です。true の場合、ネストされた結果セットまたはグループが含まれると想定されます。メインの結果行が返されるとき、前の結果セットへの参照は生成されません。
結果セット 複数の結果セットにのみ適用されます。ステートメントの実行後に返された結果セットをリストし、各結果セットに名前を付けます。複数の名前はカンマで区切られます。

select タグには多くの属性がありますが、最もよく使用される 4 つの属性は、id、parameterType、resultType、および resultMap です。resultMap は MyBatis の強力な機能の 1 つであり、これを完全に理解していれば、多くの複雑なマッピング問題を簡単に解決できます。

2.2 インサート

insert タグは主に、データを挿入するための SQL ステートメントを定義するために使用されます。次に例を示します。

<insert id="insert" parameterType="com.example.demo.Mapper.Student">
    INSERT INTO
    student
    (id, name, sex, age)
    VALUES
    (#{
    
    id}, #{
    
    name}, #{
    
    sex}, #{
    
    age})
</insert>

上記の例では、insert ステートメントの構成ルールはより複雑で、主キーの生成方法を処理するために追加の属性とサブ要素が提供されています。

データベースに主キーを自動的に生成するフィールドが含まれている場合は、useGeneratedKeys="true" を設定してから、keyProperty をターゲット プロパティに設定できます。たとえば、上記の Student テーブルでは、id 列に自動生成された主キーが使用されているため、ステートメントは次のように変更できます。

<insert id="insert" useGeneratedKeys="true" keyProperty="id" parameterType="com.example.demo.model.Student">
    INSERT INTO
    student
    (name, sex, age)
    VALUES
    (#{
    
    name}, #{
    
    sex}, #{
    
    age})
</insert>

上の例では、useGeneratedKeys="true" を設定し、対応する主キー フィールドに keyProperty="id" を設定します。

挿入タグに含まれる属性を表に示します。

属性 説明する
ID このステートメントを参照するために使用される名前空間内の一意の識別子
パラメータの種類 ステートメントに渡されるパラメータのデータ型 (オプション)。MyBatis は、タイプ ハンドラー (TypeHandler) を通じてステートメントに渡されるパラメーターのデータ型を推測できます。デフォルト値は設定されていません。
フラッシュキャッシュ キャッシュをクリアするかどうか。デフォルト値は true です。ステートメントが呼び出されている限り、ローカル キャッシュと 2 次キャッシュがクリアされます。
タイムアウト タイムアウト。データベースがリクエスト結果を返すまでの待機時間です。デフォルト値は未設定です
ステートメントの種類 SQL ステートメントを実行するには、Statement、PreparedStatement、または CallableStatement を使用します。デフォルト値は PREPARED です。
useGeneratedKeys 主キーを自動的に生成します。デフォルト値は false です。true に設定すると、ルールに従って主キーが自動的に生成されます。
keyProperty オブジェクトを一意に識別する属性を指定します
キーカラム データベーステーブルの主キー列名を指定します。
データベース データベース ベンダー ID (databaseIdProvider): この属性が設定されている場合、MyBatis は、databaseId を持たない、または現在の databaseId に一致しないすべてのステートメントをロードします。

一般的に使用される属性には、id、parameterType、useGeneratedKeys、keyProperty などが含まれます。一部の属性は select タグと一致します。

2.3アップデート

update タグは insert タグに似ており、主に update ステートメントをマップするために使用されます。サンプル コードは次のとおりです。

<update id="update" parameterType="com.example.demo.model.Student">
    UPDATE
    student
    SET
    name = #{
    
    name},
    sex = #{
    
    sex},
    age = #{
    
    age}
    WHERE
    id = #{
    
    iid
</update>

渡されたパラメータに基づいて変更を行うかどうかを動的に決定する必要がある場合は、if タグを使用して SQL ステートメントを動的に生成できます。サンプル コードは次のとおりです。

<update id="update" parameterType="com.example.demo.model.Student">
    UPDATE
    student
    SET
    <if test="name != null">name = #{
    
    name},</if>
    <if test="sex != null">sex = #{
    
    sex},</if>
    age = #{
    
    age}
    WHERE
    id = #{
    
    iid
</update>

上記の例では、if タグを使用して、受信した名前パラメーターが空かどうかを判断し、パラメーターに基づいて SQL ステートメントが動的に生成されます。

updateタグに含まれる属性は基本的にinsertタグと同じです。

2.4 削除

delete タグは、delete ステートメントをマップするために使用されます。

<delete id="delete" parameterType="Long">
    DELETE FROM
    student
    WHERE
    id = #{
    
    id}
</delete>

削除タグに含まれる属性を表に示します。

ここに画像の説明を挿入します

delete タグは、useGeneratedKeys、keyProperty、keyColumn の 3 つの属性がないことを除いて、insert タグおよび update タグと同じです。

3. 結果のマッピング

結果マッピングは MyBatis の重要な機能の 1 つです。単純な SQL クエリの場合は、resultType 属性を使用して結果を Java データ型に自動的に変換します。ただし、複雑なステートメントの場合は、resultMap マッピングを使用してクエリ結果をデータ エンティティ関係に変換します。

3.1 結果の種類

先ほど select タグを紹介したときに、select タグの戻り結果で 2 つの属性 resultMap と resultType を使用してマッピング構造を指定できることを説明しました。resultType の使用法を示してみましょう。

<select id="selectOne" resultType="com.example.demo.model.Student">
    select *
    from student
    where id =#{
    
    id}
</select>

resultType 属性を設定すると、MyBatis はクエリ結果セットを Student エンティティ オブジェクトに自動的に変換します。もちろん、一部のフィールドのみをクエリする場合は、次のような HashMap を返すことができます。

<select id="selectOne" parameterType="Long" resultType="hashmap">
    select name,age from student where id = #{
    
    id}
</select>

上記のステートメントでは、Mybatis はすべての列を HashMap オブジェクトに自動的にマップします。

3.2 結果マップ

日常の開発プロセスでは、ほとんどの場合、resultType で十分です。ただし、resultType を使用するには、データベース フィールド名と属性フィールド名が一致している必要があります。そうでない場合は、エイリアスを使用する必要があるため、SQL ステートメントが複雑になります。

したがって、MyBatis は、SQL クエリ結果フィールドとエンティティ属性の間のマッピング関係を定義する resultMap タグを提供します。以下は、resultMap の使用法を示しています。

まず、resultMap を定義します。

<resultMap id="BaseResultMap" type="com.example.demo.model.Student">
    <id column="id" property="id" jdbcType="BIGINT" />
    <result column="name" property="name" jdbcType="VARCHAR" />
    <result column="sex" property="sex" javaType="INTEGER" />
    <result column="age" property="age" jdbcType="INTEGER" />
</resultMap>

上記の例では、resultMap タグを使用して BaseResultMap マッピング関係を定義し、データベース内のフィールドを Student エンティティ オブジェクトにマップします。

次に、カスタマイズされた BaseResultMap マッピング関係を SQL ステートメントで使用し、select タグの resultMap="BaseResultMap" を設定します。サンプル コードは次のとおりです。

<select id="selectOne" parameterType="Long" resultMap="BaseResultMap">
    SELECT
    *
    FROM student
    WHERE id =#{
    
    id}
</select>

3.3 resultMapの構造

resultMap タグの構造は比較的複雑で、多くのサブ属性とサブタグが含まれています。resultMap タグには、id 属性と type 属性が含まれます。

  • id は、resultMap の一意の識別子を定義します。
  • type は戻り値のクラス名です。

同様に、resultMap には次のような複数のサブタグを含めることもできます。

1) id タグは、主キー フィールドとドメイン モデル属性の間のマッピング関係を設定するために使用されます。ここでの主キーは id であり、データベース フィールドの主キー ID に対応します。

2) result タグは、通常のフィールドとドメイン モデルの間の属性マッピング関係を設定するために使用されます。

3) 関連タグは 1 対 1 の結果マッピングを構成するために使用され、resultMap 内の定義または他の結果マッピングへの参照に関連付けることができます。

4) コレクション タグは、1 対多の結果マッピングを構成するために使用されます。これは、resultMap 内の定義または他の結果マッピングへの参照に関連付けることができます。

以下は完全な resultMap 要素の構造です。

<resultMap id="BaseResultMap" type="com.example.demo.model.Student">
    <id column="id" property="id" jdbcType="BIGINT" />
    <result column="name" property="name" jdbcType="VARCHAR" />
    <result column="sex" property="sex" javaType="INTEGER" />
    <result column="age" property="age" jdbcType="INTEGER" />
    <association property="classes" javaType="com.example.demo.model.Classes">
        <id column="id" property="id"/>
        <result column="class_name" property="name" jdbcType="VARCHAR"/>
        <result column="memo" property="memo" jdbcType="VARCHAR"/>
    </association>
</resultMap>

おすすめ

転載: blog.csdn.net/weixin_45627039/article/details/132595593
おすすめ