質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Apache Maven 2

Apache Mavenは、ソフトウェアプロジェクトの管理ツールです。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

Q&A

0回答

1491閲覧

Spring Bootのマルチモジュール構成にて、別モジュールのMapperが「could not be found.」となる

springfever

総合スコア0

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Apache Maven 2

Apache Mavenは、ソフトウェアプロジェクトの管理ツールです。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

0グッド

0クリップ

投稿2020/05/10 15:43

Spring Bootのマルチプロジェクトの構成で疑問があり質問させてください。

まず、プロジェクトのディレクトリ構造は以下のようになっており、
ドメインモジュールとアプリケーションモジュールから構成されています。

example(親プロジェクト)
├── pom.xml
├── core(ドメインモジュール)
│ ├── pom.xml
│ └── src
│ └── main
│ └── java
│ └── jp.co.example.core
│ ├── config
│ └── MybatisConfig.java
│ ├── entity
│ └── User.java
│ ├── mapper
│ │ └── UserMapper.java
│ ├── repository
│ └── UserRepository.java
│ └── service
│ └── UserService.java
├── application(アプリケーションモジュール)
│ ├── pom.xml
│ ├── src
│ └── main
│ └── java
│ └── jp.co.example.application
│ ├── Controller
│ └── ExampleApplication.java

coreモジュールのUserMapper.javaはMybatisで実装しており、
UserRepository.javaでAutowiredしています。
また、@Mapperのアノテーションを付与しています。

Java

1package jp.co.example.core.mapper; 2 3import java.util.List; 4 5import org.apache.ibatis.annotations.Mapper; 6import org.apache.ibatis.annotations.Param; 7 8import jp.co.example.core.entity.User; 9 10@Mapper 11public interface UserMapper { 12 int insert(User record); 13 14 List<User> selectAll(); 15 16 User selectByUserNo(@Param("userNo") long userNo); 17}

Applicationモジュールのメインクラスは以下の通りです。

Java

1package jp.co.example.application; 2 3import org.springframework.boot.SpringApplication; 4import org.springframework.boot.autoconfigure.SpringBootApplication; 5 6@SpringBootApplication(scanBasePackages = {"jp.co.example.application", "jp.co.example.core"}) 7public class ExampleApplication { 8 9 public static void main(String[] args) { 10 SpringApplication.run(ExampleApplication.class,args); 11 } 12 13}

Mavenビルド後、ApplicationモジュールをRunすると以下のエラーで起動ができませんでした。

Description: Parameter 0 of constructor in jp.co.example.core.repository.UserRepository required a bean of type 'jp.co.example.core.mapper.UserMapper' that could not be found. Action: Consider defining a bean of type 'jp.co.example.core.mapper.UserMapper' in your configuration.

上記のエラーについて、以下のようにメインクラスにて@MapperScanでパッケージ指定してみると動作することが確認できました。

Java

1package jp.co.example.application; 2 3import org.springframework.boot.SpringApplication; 4import org.springframework.boot.autoconfigure.SpringBootApplication; 5 6@SpringBootApplication(scanBasePackages = {"jp.co.example.application", "jp.co.example.core"}) 7@MapperScan("jp.co.example.core.mapper") 8public class ExampleApplication { 9 10 public static void main(String[] args) { 11 SpringApplication.run(ExampleApplication.class,args); 12 } 13 14}

しかし、@ComponentScanによるパッケージ指定とは別に@MapperScanが必要なのはなぜでしょうか?
別モジュールのBeanを参照する場合、@ComponentScanによるパッケージ指定が必要と理解しています。
coreモジュールのマッパーに@Mapperが付与されていれば勝手に読み込んでくれるものと
思っていたのですが認識が間違っていますでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問