Domaの接続にめちゃくちゃハマった時のこと、Daoが見つからない

##初めに
Domaを使おうと思ったら、めちゃくちゃハマったのでその時のメモです。
Domaについてあまり詳しくはありませんが、した事全部メモしておきます。
もしかしたら、不要な箇所もあるかもしれません。教えてください。
ビルドツールはMavenです。
ControllerからDaoを使うところでエラーです。

#エラー内容
実行したら、こんな感じのエラー

```
Field dao in .......
 '.......' that could not be found.

The injection point has the following annotations:
	- @org.springframework.beans.factory.annotation.Autowired(required=true)
```
Controllerで「@ Autowired」しているDaoが見つからないという内容
ここでの理解ポイント

* Daoインターフェースの実装クラスを 「@ Autowired」したい
* 実装クラスはDomaによって自動で作られる
* 自動で作られたDomaにも、DIコンテナに登録するアノテーションが必要

#使えるようにするまで
全体はこんな感じです

* Doma Toolosをインストール(必要かわからない)
* pom.xmlの編集
* プロパティの設定
* Daoの作成
* 対応するSQLファイルの作成

###Doma Toolosをインストール(必要かわからない)
(すみません。これは必要かどうかわかりません。
何回も失敗していく中でインストールして、そのまま消さずにやったので一応記載)
「ヘルプ」→「新規ソフトウェアのインストール...」を選択します。
作業対象に以下を入力し、「Doma Tools」をインストールします。
http://eclipse.seasar.org/updates/3.5/

###pom.xmlの編集
まずは、依存関係を追加します。
pom.xmlに以下を追加します。

```pom.xml
<dependency>
    <groupId>org.seasar.doma</groupId>
    <artifactId>doma</artifactId>
    <version>2.29.0</version>
</dependency>

<dependency>
    <groupId>org.seasar.doma.boot</groupId>
    <artifactId>doma-spring-boot-starter</artifactId>
    <version>1.5.0</version>
</dependency>
```
doma-spring-boot-starterが多くの設定を行ってくれるみたいです。
これ使わないと、Daoの実装クラスをDIコンテナに登録するためのアノテーションをつけたりと色々設定する必要があります。
自分はそのアノテーションつけたり、してみたのですがうまくいきませんでした。

###プロパティの設定

プロパティの設定で行うことは３つです。

* ビルドパス設定で、ソースの編集
* ビルドパス設定で、ライブラリーに追加(多分自動でされてる)
* 注釈処理、ファクトリーパスの設定

___ビルドパス設定で、ソースの編集___
プロジェクトを右クリック「プロパティ」→「Javaのビルド・パス」→「ソース」と進みます。
src/main/resourceの中を変更します。
初期では、「除外：*」となっているはずです。
選択して、除去をします。除外:(なし)となったら大丈夫です。


___ビルドパス設定で、ライブラリーに追加___
先程の、pom.xmlの編集で行うことと被っていますが、一応記載しておきます。
「プロパティ」→「Javaのビルド・パス」→「ライブラリー」と進みます。
Maven依存関係を確認します。
先程の、pom.xmlの編集のおかげでdomaのjarが追加されていることが確認できます。
確認が出来たら大丈夫です。

___注釈処理、ファクトリーパスの設定___
先程の追加されていたJarファイルをファクトリーパスにも追加します。
「プロパティ」→「Javaコンパイラー」→「注釈処理」と進みます。
「プロジェクト固有の設定を可能にする」と「注釈処理を使用可能にする」にチェックがなければ、チェックしてください。

「注釈処理」→「ファクトリー・パス」と進みます。
ここで、外部Jarの追加を選択し、domaのjarファイルを追加します。
自分のところでは、「Users/{名前}/.m2/repository/org/seasar/doma/doma/2.29.0/doma-2.29.0.jar」でした。
ちなみにMacです。先程ライブラリーで確認したjarファイルと同じものなので、パスはそこで確認できます。
※Macでは、ファイルを選択する画面で、「コマンド+shift+g」でパスで検索ができます。

doma-2.29.0.jarの追加だけで大丈夫です。
doma-spring-boot-starterの方は、追加しなくてもできました。
おそらくその辺りの設定も自動でしてくれているのでしょう。

###Daoの作成

```Dao.java
import org.seasar.doma.Dao;
import org.seasar.doma.Select;
import org.seasar.doma.boot.ConfigAutowireable;

@ConfigAutowireable
@Dao
public interface UserDao {

	@Select
	public List<UserDto> selectAll();
}
```
DtoやListのインポート等は省略してます。

###対応するSQLファイルの作成
「src/main/resources」の直下に「META-INF」フォルダを作成します。
META-INFのなかに、Dao.javaと同じ構造でDaoフォルダを作成し,その中にSQLを作成します。

例：(src/main/java/com/example/demo/dao/UserDao.javaの場合)
「src/main/resources/META-INF/com/example/demo/dao/UserDao/selectAll.sql」

これで、「.apt_generated」に自動でDaoの実装ファイルが作られるようになりました。

###Controllerから呼び出す
最後に、ControllerでAutowiredして、
これでdaoに定義したメソッド(sql)が使えるようになりました。

```Controller.java
@Autowired
	private UserDao dao;
```

##最後に
今回は使い方の説明ではないので、Dtoの作成などはしていませんが、
一応これでDomaが利用できるようになりました。

doma-spring-boot-starterを使わない記事も多く見つかり、色々と書かれていたのですが、
これだけでできると思いますので、この方法で試してみてください。

Configファイルの設定やら、実装ファイルをDIコンテナに登録するためのアノテーションの作成やらは、必要ありません。