@@ -19,7 +19,7 @@ Maven を利用している場合は pom.xml に下記の依存性を追加す
19
19
20
20
## XML 形式の設定ファイルを使って SqlSessionFactory を生成する
21
21
22
- MyBatis アプリケーションは、SqlSessionFactory のインスタンスを中心に構成されています。
22
+ MyBatis アプリケーションは、SqlSessionFactory のインスタンスを中心に構成されています。< br />
23
23
SqlSessionFactory のインスタンスは、SqlSessionFactoryBuilder を使って取得することができます。 SqlSessionFactoryBuilder が SqlSessionFactory を生成する際の設定は、XML 形式の設定ファイルを読み込むか、独自に用意した Configuration クラスのインスタンスを渡すことで行います。
24
24
25
25
XML 形式の設定ファイルを使って SqlSessionFactory を生成するのはとても簡単です。<br />
@@ -31,7 +31,7 @@ InputStream inputStream = Resources.getResourceAsStream(resource);
31
31
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder (). build(inputStream);
32
32
```
33
33
34
- XML 形式の設定ファイルには、MyBatis システムの基本設定が含まれます。 例えば、データベースから Connection のインスタンスを取得する DataSource や、トランザクションの制御方法を決定する TransactionManager などです。
34
+ XML 形式の設定ファイルには、MyBatis システムの基本設定が含まれます。 例えば、データベースから Connection のインスタンスを取得する DataSource や、トランザクションの制御方法を決定する TransactionManager などです。< br />
35
35
XML 形式の設定ファイルの詳細については後ほど改めて説明しますが、ここでは簡単なサンプルを挙げておきます。
36
36
37
37
``` xml
@@ -57,14 +57,14 @@ XML 形式の設定ファイルの詳細については後ほど改めて説明
57
57
</configuration >
58
58
```
59
59
60
- XML 形式の設定ファイルについて説明すべきことは他にもたくさんありますが、最も重要な設定は上記のサンプルに含まれています。
61
- まず、XML ドキュメントのバリデーションを行うために必要となる XML ヘッダがあります。
62
- environment 要素には、トランザクション管理やコネクションプーリングといった環境依存の設定が含まれています。
60
+ XML 形式の設定ファイルについて説明すべきことは他にもたくさんありますが、最も重要な設定は上記のサンプルに含まれています。< br />
61
+ まず、XML ドキュメントのバリデーションを行うために必要となる XML ヘッダがあります。< br />
62
+ environment 要素には、トランザクション管理やコネクションプーリングといった環境依存の設定が含まれています。< br />
63
63
mappers 要素には Mapper のリストが含まれています。Mapper とは、SQL 文とマッピングの定義を含む XML ファイルです。
64
64
65
65
## XML を使わずに SqlSessionFactory を生成する
66
66
67
- XML を使わず Java のコードで設定を行いたい方のために、Configuraiton クラスが提供されています。
67
+ XML を使わず Java のコードで設定を行いたい方のために、Configuraiton クラスが提供されています。< br />
68
68
XML 形式の設定ファイルで指定できるオプションは、このクラスでも全て設定可能です。
69
69
70
70
``` java
@@ -76,14 +76,14 @@ configuration.addMapper(BlogMapper.class);
76
76
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder (). build(configuration);
77
77
```
78
78
79
- 今回は、Configuration のインスタンスに Mapper クラスを追加していることに気づいたでしょうか。
80
- Mapper クラスには、XML を使わずに SQL マッピングを定義するためのアノテーションが含まれています。 ただし、Java アノテーションの制約と MyBatis のマッピング機能の複雑さのため、高度なマッピングを定義する際に XML 形式の Mapper が必要となる場合があります(ネストされた結合クエリの結果をマッピングする場合など)。
79
+ 今回は、Configuration のインスタンスに Mapper クラスを追加していることに気づいたでしょうか。< br />
80
+ Mapper クラスには、XML を使わずに SQL マッピングを定義するためのアノテーションが含まれています。 ただし、Java アノテーションの制約と MyBatis のマッピング機能の複雑さのため、高度なマッピングを定義する際に XML 形式の Mapper が必要となる場合があります(ネストされた結合クエリの結果をマッピングする場合など)。< br />
81
81
このため、MyBatis は対になる XML ファイルを探して自動的に読み込むようになっています(この例では、BlogMapper.class のクラスパスと名前を元に BlogMapper.xml という XML ファイルが読み込まれます)。 この動作については、後ほど詳しく説明します。
82
82
83
83
## SqlSessionFactory から SqlSession を取得する
84
84
85
- 名前を見れば分かると思いますが、生成した SqlSessionFactory から SqlSession のインスタンスを取得することができます。
86
- SqlSession には、一連の SQL コマンドを実行するためのメソッドが全て用意されています。 SqlSession のインスタンスに対して、マップされた SQL 文を直接指定して実行することができます。
85
+ 名前を見れば分かると思いますが、生成した SqlSessionFactory から SqlSession のインスタンスを取得することができます。< br />
86
+ SqlSession には、一連の SQL コマンドを実行するためのメソッドが全て用意されています。 SqlSession のインスタンスに対して、マップされた SQL 文を直接指定して実行することができます。< br />
87
87
例えば下記のようなコードになります。
88
88
89
89
``` java
@@ -109,7 +109,7 @@ try (SqlSession session = sqlSessionFactory.openSession()) {
109
109
110
110
SqlSession や Mapper クラスによって何が行われているのか、そろそろ気になり出した頃ではないでしょうか。 Mapped SQL Statements は非常に大きな話題で、このドキュメントの大部分を占めることになると思いますが、 ここではいくつか例を挙げて、実際にどのような処理が行われているのかを簡単に説明してみたいと思います。
111
111
112
- 上で挙げた2つのサンプルに対応する SQL Statement は、XML、アノテーションのどちらを使っても定義することができます。
112
+ 上で挙げた2つのサンプルに対応する SQL Statement は、XML、アノテーションのどちらを使っても定義することができます。< br />
113
113
はじめに XML について見て行きましょう。 何年にも渡って MyBatis の人気を築いてきた XML ベースのマッピング言語を使えば、MyBatis の全機能を把握することができます。 このドキュメントの後の方で出てきますが、旧バージョンの MyBatis を使ったことがある方なら、コンセプトは同じですが、多くの改良が加えられていることが分かると思います。 以下は、先ほどの例で SqlSession のメソッドを呼び出したときに実行されることを想定した XML ベースの Mapped Statement です。
114
114
115
115
``` xml
@@ -124,9 +124,9 @@ SqlSession や Mapper クラスによって何が行われているのか、そ
124
124
</mapper >
125
125
```
126
126
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 />
130
130
上のサンプルと同じですが、この Mapped Statement を実行するには、以下のように完全修飾名「org.mybatis.example.BlogMapper.selectBlog」を指定して SqlSession のメソッドを呼び出します。
131
131
132
132
``` java
@@ -140,14 +140,14 @@ BlogMapper mapper = session.getMapper(BlogMapper.class);
140
140
Blog blog = mapper. selectBlog(101 );
141
141
```
142
142
143
- 2番目の方法には多くの利点があります。
143
+ 2番目の方法には多くの利点があります。< br />
144
144
まず、文字列リテラルに頼らずに済むので、ずっと安全です。また、Mapped SQL Statement を選ぶときに IDE のコード補完機能を使うことができます。
145
145
146
146
---
147
147
148
148
<span class =" label important " >NOTE</span > ** ネームスペースについて**
149
149
150
- ** ネームスペース:** 過去のバージョンの MyBatis では、ネームスペースはオプションでしたが、これは混乱や誤用の原因となっていました。
150
+ ** ネームスペース:** 過去のバージョンの MyBatis では、ネームスペースはオプションでしたが、これは混乱や誤用の原因となっていました。< br />
151
151
現在のバージョンではネームスペースは必須であり、単に長い完全修飾名を使って Statement を整理する以上に重要な役割を果たしています。
152
152
153
153
上で見たように、ネームスペースはインターフェイスバインディングを行うために使われています。 たとえ今は必要ないと思っても、将来気が変わったときのために推奨される手順通りに設定しておくべきです。 長い目で見れば、ネームスペースを指定して正しい Java パッケージに配置しておくことでクリーンなコードを書くことができ、MyBatis の使い勝手も向上するはずです。
0 commit comments