初めに
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に以下を追加します。
<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コンテナに登録するためのアノテーションをつけたりと色々設定する必要があります。
自分はそのアノテーションつけたり、してみたのですがうまくいきませんでした。
プロパティの設定
プロパティの設定で行うことは3つです。
- ビルドパス設定で、ソースの編集
- ビルドパス設定で、ライブラリーに追加(多分自動でされてる)
- 注釈処理、ファクトリーパスの設定
ビルドパス設定で、ソースの編集
プロジェクトを右クリック「プロパティ」→「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の作成
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)が使えるようになりました。
@Autowired
private UserDao dao;
最後に
今回は使い方の説明ではないので、Dtoの作成などはしていませんが、
一応これでDomaが利用できるようになりました。
doma-spring-boot-starterを使わない記事も多く見つかり、色々と書かれていたのですが、
これだけでできると思いますので、この方法で試してみてください。
Configファイルの設定やら、実装ファイルをDIコンテナに登録するためのアノテーションの作成やらは、必要ありません。