2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Posted at

初めに

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コンテナに登録するためのアノテーションをつけたりと色々設定する必要があります。
自分はそのアノテーションつけたり、してみたのですがうまくいきませんでした。

プロパティの設定

プロパティの設定で行うことは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の作成

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コンテナに登録するためのアノテーションの作成やらは、必要ありません。

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?