@@ -19,7 +19,7 @@ Maven を利用している場合は pom.xml に下記の依存性を追加す
1919
2020## XML 形式の設定ファイルを使って SqlSessionFactory を生成する
2121
22- MyBatis アプリケーションは、SqlSessionFactory のインスタンスを中心に構成されています。
22+ MyBatis アプリケーションは、SqlSessionFactory のインスタンスを中心に構成されています。< br />
2323SqlSessionFactory のインスタンスは、SqlSessionFactoryBuilder を使って取得することができます。 SqlSessionFactoryBuilder が SqlSessionFactory を生成する際の設定は、XML 形式の設定ファイルを読み込むか、独自に用意した Configuration クラスのインスタンスを渡すことで行います。
2424
2525XML 形式の設定ファイルを使って SqlSessionFactory を生成するのはとても簡単です。<br />
@@ -31,7 +31,7 @@ InputStream inputStream = Resources.getResourceAsStream(resource);
3131SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder (). build(inputStream);
3232```
3333
34- XML 形式の設定ファイルには、MyBatis システムの基本設定が含まれます。 例えば、データベースから Connection のインスタンスを取得する DataSource や、トランザクションの制御方法を決定する TransactionManager などです。
34+ XML 形式の設定ファイルには、MyBatis システムの基本設定が含まれます。 例えば、データベースから Connection のインスタンスを取得する DataSource や、トランザクションの制御方法を決定する TransactionManager などです。< br />
3535XML 形式の設定ファイルの詳細については後ほど改めて説明しますが、ここでは簡単なサンプルを挙げておきます。
3636
3737``` xml
@@ -57,14 +57,14 @@ XML 形式の設定ファイルの詳細については後ほど改めて説明
5757</configuration >
5858```
5959
60- XML 形式の設定ファイルについて説明すべきことは他にもたくさんありますが、最も重要な設定は上記のサンプルに含まれています。
61- まず、XML ドキュメントのバリデーションを行うために必要となる XML ヘッダがあります。
62- environment 要素には、トランザクション管理やコネクションプーリングといった環境依存の設定が含まれています。
60+ XML 形式の設定ファイルについて説明すべきことは他にもたくさんありますが、最も重要な設定は上記のサンプルに含まれています。< br />
61+ まず、XML ドキュメントのバリデーションを行うために必要となる XML ヘッダがあります。< br />
62+ environment 要素には、トランザクション管理やコネクションプーリングといった環境依存の設定が含まれています。< br />
6363mappers 要素には Mapper のリストが含まれています。Mapper とは、SQL 文とマッピングの定義を含む XML ファイルです。
6464
6565## XML を使わずに SqlSessionFactory を生成する
6666
67- XML を使わず Java のコードで設定を行いたい方のために、Configuraiton クラスが提供されています。
67+ XML を使わず Java のコードで設定を行いたい方のために、Configuraiton クラスが提供されています。< br />
6868XML 形式の設定ファイルで指定できるオプションは、このクラスでも全て設定可能です。
6969
7070``` java
@@ -76,14 +76,14 @@ configuration.addMapper(BlogMapper.class);
7676SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder (). build(configuration);
7777```
7878
79- 今回は、Configuration のインスタンスに Mapper クラスを追加していることに気づいたでしょうか。
80- Mapper クラスには、XML を使わずに SQL マッピングを定義するためのアノテーションが含まれています。 ただし、Java アノテーションの制約と MyBatis のマッピング機能の複雑さのため、高度なマッピングを定義する際に XML 形式の Mapper が必要となる場合があります(ネストされた結合クエリの結果をマッピングする場合など)。
79+ 今回は、Configuration のインスタンスに Mapper クラスを追加していることに気づいたでしょうか。< br />
80+ Mapper クラスには、XML を使わずに SQL マッピングを定義するためのアノテーションが含まれています。 ただし、Java アノテーションの制約と MyBatis のマッピング機能の複雑さのため、高度なマッピングを定義する際に XML 形式の Mapper が必要となる場合があります(ネストされた結合クエリの結果をマッピングする場合など)。< br />
8181このため、MyBatis は対になる XML ファイルを探して自動的に読み込むようになっています(この例では、BlogMapper.class のクラスパスと名前を元に BlogMapper.xml という XML ファイルが読み込まれます)。 この動作については、後ほど詳しく説明します。
8282
8383## SqlSessionFactory から SqlSession を取得する
8484
85- 名前を見れば分かると思いますが、生成した SqlSessionFactory から SqlSession のインスタンスを取得することができます。
86- SqlSession には、一連の SQL コマンドを実行するためのメソッドが全て用意されています。 SqlSession のインスタンスに対して、マップされた SQL 文を直接指定して実行することができます。
85+ 名前を見れば分かると思いますが、生成した SqlSessionFactory から SqlSession のインスタンスを取得することができます。< br />
86+ SqlSession には、一連の SQL コマンドを実行するためのメソッドが全て用意されています。 SqlSession のインスタンスに対して、マップされた SQL 文を直接指定して実行することができます。< br />
8787例えば下記のようなコードになります。
8888
8989``` java
@@ -109,7 +109,7 @@ try (SqlSession session = sqlSessionFactory.openSession()) {
109109
110110SqlSession や Mapper クラスによって何が行われているのか、そろそろ気になり出した頃ではないでしょうか。 Mapped SQL Statements は非常に大きな話題で、このドキュメントの大部分を占めることになると思いますが、 ここではいくつか例を挙げて、実際にどのような処理が行われているのかを簡単に説明してみたいと思います。
111111
112- 上で挙げた2つのサンプルに対応する SQL Statement は、XML、アノテーションのどちらを使っても定義することができます。
112+ 上で挙げた2つのサンプルに対応する SQL Statement は、XML、アノテーションのどちらを使っても定義することができます。< br />
113113はじめに XML について見て行きましょう。 何年にも渡って MyBatis の人気を築いてきた XML ベースのマッピング言語を使えば、MyBatis の全機能を把握することができます。 このドキュメントの後の方で出てきますが、旧バージョンの MyBatis を使ったことがある方なら、コンセプトは同じですが、多くの改良が加えられていることが分かると思います。 以下は、先ほどの例で SqlSession のメソッドを呼び出したときに実行されることを想定した XML ベースの Mapped Statement です。
114114
115115``` xml
@@ -124,9 +124,9 @@ SqlSession や Mapper クラスによって何が行われているのか、そ
124124</mapper >
125125```
126126
127- 例が簡単なので無駄に記述量が多いように見えるかも知れませんが、本質的にはそれほどではありません。
128- ひとつの Mapper XML ファイルに複数の Mapped Statement を定義することができるので、XML ヘッダや doctype 宣言は一度書くだけです。
129- 残りの部分はほぼ自明ですが、「org.mybatis.example.BlogMapper」というネームスペースの中に「selectBlog」という名前の Mapped Statement を定義しています。
127+ 例が簡単なので無駄に記述量が多いように見えるかも知れませんが、本質的にはそれほどではありません。< br />
128+ ひとつの Mapper XML ファイルに複数の Mapped Statement を定義することができるので、XML ヘッダや doctype 宣言は一度書くだけです。< br />
129+ 残りの部分はほぼ自明ですが、「org.mybatis.example.BlogMapper」というネームスペースの中に「selectBlog」という名前の Mapped Statement を定義しています。< br />
130130上のサンプルと同じですが、この Mapped Statement を実行するには、以下のように完全修飾名「org.mybatis.example.BlogMapper.selectBlog」を指定して SqlSession のメソッドを呼び出します。
131131
132132``` java
@@ -140,14 +140,14 @@ BlogMapper mapper = session.getMapper(BlogMapper.class);
140140Blog blog = mapper. selectBlog(101 );
141141```
142142
143- 2番目の方法には多くの利点があります。
143+ 2番目の方法には多くの利点があります。< br />
144144まず、文字列リテラルに頼らずに済むので、ずっと安全です。また、Mapped SQL Statement を選ぶときに IDE のコード補完機能を使うことができます。
145145
146146---
147147
148148<span class =" label important " >NOTE</span > ** ネームスペースについて**
149149
150- ** ネームスペース:** 過去のバージョンの MyBatis では、ネームスペースはオプションでしたが、これは混乱や誤用の原因となっていました。
150+ ** ネームスペース:** 過去のバージョンの MyBatis では、ネームスペースはオプションでしたが、これは混乱や誤用の原因となっていました。< br />
151151現在のバージョンではネームスペースは必須であり、単に長い完全修飾名を使って Statement を整理する以上に重要な役割を果たしています。
152152
153153上で見たように、ネームスペースはインターフェイスバインディングを行うために使われています。 たとえ今は必要ないと思っても、将来気が変わったときのために推奨される手順通りに設定しておくべきです。 長い目で見れば、ネームスペースを指定して正しい Java パッケージに配置しておくことでクリーンなコードを書くことができ、MyBatis の使い勝手も向上するはずです。
0 commit comments