マッパーは MyBatis で最も重要なファイルです。ファイルには一連の SQL ステートメント (クエリ、追加、削除、変更など) が含まれています。これらのステートメントはマッピング ステートメントまたはマッピング SQL ステートメントと呼ばれます。
マッパーはJavaインターフェースとXMLファイル(またはアノテーション)で構成されており、その機能は以下の通りです。
- パラメータのタイプを定義する
- キャッシュの構成
- SQL ステートメントと動的 SQL を提供する
- クエリ結果とPOJOの間のマッピング関係を定義する
マッパーを実装するには 2 つの方法があります。
- これは、mybatis-config.xml ファイルで説明した XML ファイルなど、マッパーの生成に使用される XML ファイルを通じて実装されます。
- これはアノテーションを通じて実装され、Configuration オブジェクトを使用して Mapper インターフェイスを登録します。
SQL ステートメントに動的 SQL が含まれている場合、または比較的複雑な場合、注釈を使用して Java ファイルに記述すると、SQL ステートメントが読みにくくなり、メンテナンス コストが増加します。したがって、SQL ステートメントを繰り返し記述することを避けるために、通常は XML ファイル構成を使用することをお勧めします。
XML実装マッパー
XML 定義マッパーは、インターフェイスと XML の 2 つの部分に分かれています。まず、WebsiteMapper インターフェイスを定義しましょう
public interface WebsiteMapper {
public List<Website> selectAllWebsite();
}
WebsiteMapper.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="net.cc.mapper.WebsiteMapper">
<!-- 查询所有网站信息 -->
<select id="selectAllWebsite"
resultType="net.cc.po.Website">
select * from website
</select>
</mapper>
上記XMLファイルについて説明します。
- namespace は、定義されたインターフェイスの完全修飾名と一致する名前空間を定義するために使用されます。
- <select> 要素は、これがクエリ ステートメントであることを示し、属性 ID はこの SQL を識別するために使用されます。resultType は、Web サイト タイプの値が返されることを示します。
MyBatis 構成ファイルに次のコードを追加します。
<mapper resource="net/cc/mapper/WebsiteMapper.xml" />
このステートメントは XML ファイルを導入するために使用され、MyBatis は WebsiteMapper.xml ファイルを読み取り、マッパーを生成します。
アノテーション実装マッパー
アノテーションを使用してマッパーを実装するには、インターフェイスで Java アノテーションを使用し、SQL を挿入するだけで済みます。次のように。
public interface WebsiteMapper2 {
@Select(value = "select * from website")
public List<Website> selectAllWebsite();
}
ここでは @Select アノテーションを使用し、XML と同じ選択ステートメントを挿入します。
注釈と XML ファイル メソッドの両方を使用して定義された場合、XML メソッドは注釈メソッドをオーバーライドします。
ここでのアノテーション方法は XML よりも単純に見えますが、実際に遭遇する SQL はこの例よりもはるかに複雑になります。SQL ステートメントに複数のテーブルの関連付け、複数のクエリ条件、カスケード、条件分岐などが含まれる場合、明らかにこの SQL ははるかに複雑になるため、この方法の使用はお勧めしません。注釈は使用できないため、より複雑なシナリオでは、XML を使用する方が柔軟で便利です。したがって、ほとんどの企業は主に XML を使用しており、このチュートリアルでは一貫性を保ち、XML でマッパーを作成します。もちろん、一部の単純なテーブルやアプリケーションでは注釈を使用する方が簡単です。
MyBatis マッパーの主な要素
マッパーで定義できる要素とその機能について説明します。
要素名 | 説明する | 述べる |
---|---|---|
マッパー | マッピング ファイルのルート ノードには、namescape という属性が 1 つだけあります。 | ネームスケープは次のように機能します。
|
選択する | クエリ ステートメント。最も一般的に使用される複雑な要素の 1 つ | パラメータをカスタマイズしたり、結果セットを返したりすることができます。 |
入れる | 挿入ステートメント | 実行後、挿入された項目の数を表す整数が返されます。 |
アップデート | 更新ステートメント | 実行後、更新されたアイテムの数を表す整数が返されます。 |
消去 | ステートメントの削除 | 実行後、削除されたアイテムの数を表す整数が返されます。 |
パラメータマップ | パラメータのマッピング関係を定義する | 削除されようとしている要素の使用は推奨されません |
SQL | SQL の一部を定義し、それをあらゆる場所で参照できるようにします。 | たとえば、テーブルの列名を一度定義すると、それを複数の SQL ステートメントで使用できます。 |
結果マップ | データベースの結果セットとオブジェクト間の対応関係を記述するために使用され、最も複雑かつ強力な要素です。 | マッピングルールを提供する |
キャッシュ | 指定された名前空間のキャッシュを構成する | - |
キャッシュ参照 | 他の名前空間キャッシュ構成への参照 | - |
MyBatis SQL マッピング ファイルの Mapper 要素の namescape 属性には次の要件があります。
- ネームスケープの名前は、DAO 層に属する特定の DAO インターフェイスと同じ名前にする必要があるため、コード構造の観点から、マッピング ファイルとインターフェイスは同じパッケージ (net.biancheng など) に配置する必要があります。 .dao.website) であり、Mapper. で終わるのが通例です (WebsiteMapper.java、WebsiteMapper.xml など)。
- 異なるマッパー ファイル内のサブ要素の ID は同じである可能性があり、MyBatis はネームスケープとサブ要素の ID の組み合わせによってそれらを区別します。インターフェイス内のメソッドとマッピング ファイル内の SQL ステートメント ID の間には 1 対 1 の対応関係が必要です。