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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Spring Boot

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

Q&A

1回答

10419閲覧

MapperがController内で見つからないとエラーメッセージが表示される

Sa10

総合スコア10

Spring Boot

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

0グッド

0クリップ

投稿2018/07/19 02:29

編集2022/01/12 10:55

前提・実現したいこと

実現したいことMapperを使用して、htmlに検索結果を表示する

サンプルコードを参考に、作成したい機能のコードにあてはめていったのですが、
なぜか「MapperがController内では見つからない」と言われ続けております。
わからないので、教えてください。

発生している問題・エラーメッセージ

以下が発生したエラーメッセージです。

2018-07-19 11:02:16.985 ERROR 20264 --- [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPLICATION FAILED TO START *************************** Description: Field stampMapper in com.example.demo.controller.IndexController required a bean of type 'com.example.demo.mapper.StampMapper' that could not be found. Action: Consider defining a bean of type 'com.example.demo.mapper.StampMapper' in your configuration.

該当のソースコード

以下がControllerです。

### **IndexContoroller.java** package com.example.demo.controller; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import com.example.demo.domain.Stamp; import com.example.demo.mapper.StampMapper; @Controller public class IndexController { @Autowired private StampMapper stampMapper ; @RequestMapping public String index(Model model) { List<Stamp> list = stampMapper.selectAll(); model.addAttribute("stamp", list); return "index"; } }

以下が、Mapperです。

### **StampMapper.java** package com.example.demo.mapper; import java.util.List; import org.apache.ibatis.annotations.Mapper; import com.example.demo.domain.Stamp; @Mapper public interface StampMapper { List<Stamp> selectAll(); }
### **StampMapper.xml** <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.example.demo.mapper.StampMapper"> <!-- 打刻情報(未登録の打刻情報を問い合わせる) --> <select id="selectAll" resultType="com.example.demo.domain.Stamp"> SELECT     device_id FROM t_stamp_info </select> </mapper>
### **Stamp.java** package com.example.demo.domain; public class Stamp { String stamp_device_id; public String getStamp_device_id() { return stamp_device_id; } public void setStamp_device_id(String stamp_device_id) { this.stamp_device_id = stamp_device_id; } }

以下、pom.xmlです。

xml

1<?xml version="1.0" encoding="UTF-8"?> 2<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4 <modelVersion>4.0.0</modelVersion> 5 6 <groupId>com.example</groupId> 7 <artifactId>s</artifactId> 8 <version>0.0.1-SNAPSHOT</version> 9 <packaging>jar</packaging> 10 11 <name>s</name> 12 <description>Demo project for Spring Boot</description> 13 14 <parent> 15 <groupId>org.springframework.boot</groupId> 16 <artifactId>spring-boot-starter-parent</artifactId> 17 <version>2.0.3.RELEASE</version> 18 <relativePath/> <!-- lookup parent from repository --> 19 </parent> 20 21 <properties> 22 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 23 <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 24 <java.version>1.8</java.version> 25 </properties> 26 27 <dependencies> 28 <dependency> 29 <groupId>org.springframework.boot</groupId> 30 <artifactId>spring-boot-starter-thymeleaf</artifactId> 31 </dependency> 32 <dependency> 33 <groupId>org.springframework.boot</groupId> 34 <artifactId>spring-boot-starter-web</artifactId> 35 </dependency> 36 37 <dependency> 38 <groupId>org.springframework.boot</groupId> 39 <artifactId>spring-boot-starter-test</artifactId> 40 <scope>test</scope> 41 </dependency> 42 43 <dependency> 44 <groupId>org.hibernate</groupId> 45 <artifactId>hibernate-validator</artifactId> 46 <version>5.2.4.Final</version> 47 </dependency> 48 </dependencies> 49 50 <build> 51 <plugins> 52 <plugin> 53 <groupId>org.springframework.boot</groupId> 54 <artifactId>spring-boot-maven-plugin</artifactId> 55 </plugin> 56 </plugins> 57 </build> 58 59 60</project> 61

試したこと

・sql文の変更など

補足情報(FW/ツールのバージョンなど)

パッケージ・ファイル構成のスクリーンショット
イメージ説明

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2018/07/19 03:20

必要なライブラリがたりないんじゃないのかな
kochoru

2018/07/19 03:57 編集

MapperのBeanが見つかってないっぽいので、mybatis-spring-boot-starterを使わずmybatis-spring直使いとかなのかも知れません。そうするとMapperにMapperアノテーションを付けただけでは自動でDIコンテナに登録されなかったような。 pom.xmlも追記頂けますか?
Sa10

2018/07/19 04:15

質問ありがとうございます。pom.xmlの追記をいたしました。
退会済みユーザー

退会済みユーザー

2018/07/19 04:19

kochoru 参照ライブラリが表示されてる時点でお察しだけどね
Sa10

2018/07/19 04:30

Mapperはアノテーションを付けただけになっていたと思います。DIコンテナに登録する方法などありましたら、情報頂けると幸いです。
kochoru

2018/07/20 02:23

asahina1979 これは予想外でした
kochoru

2018/07/20 02:26

Sa10 あれ、そもそもMybatisってどうやって利用してます?(=どうやってクラスパスに通してます?(=どうやってコンパイルさせてます?)) どうやってspring-bootを起動してます?
guest

回答1

0

pom.xml上にそもそもMybatis系の依存ライブラリが記述されていないので
そもそもどうやって動かそうとしていたのかは謎ですが・・・

エラーメッセージには

Field stampMapper in com.example.demo.controller.IndexController required a bean of type 'com.example.demo.mapper.StampMapper' that could not be found.

とあります。
「IndexController内のstampMapperというフィールドが、com.example.demo.mapper.StampMapperクラスのBeanを必要としていますが、見つかりませんでした」
とのことで、対象のBeanが見つかってない、つまり今回でいうと対象のMapperがDIコンテナに登録されていないということが推測されます。
(登録されていないと、Autowiredによってインジェクションされません。(インジェクション対象のオブジェクトがそもそも無いため))
また前提知識として、SpringのDIコンテナ上で管理されているオブジェクトはどのようなクラスのオブジェクトでもBeanとして呼称されます。
(JavaBeansとかのBeanとはまた異なる意味合いを持つので留意ください。Springを用いた開発の文脈でBeanという単語が出てきたら、それは十中八九DIコンテナによる管理対象オブジェクトを指します。)

登録する方法だけとりあえず解答してしまうと、

pom.xmlmybatis-spring-boot-starterを追加する

こちらこちらを参考にpom.xmlに追加してください。
これで、AutoConfiguredMapperScannerRegistrarによってMapperアノテーションがスキャンされ、対象のMapperがDIコンテナに登録されるようになるかと思います。

自前でDIコンテナに登録する方法もありますが、シンプルなユースケースでは上記ライブラリを利用するのがベターです。

投稿2018/07/23 04:36

kochoru

総合スコア60

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

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

Sa10

2018/07/24 00:31

ご回答いただき、ありがとうございます。 回答の内容に合わせて、pox.xmlに追加したところ下記のエラーが出てきたのですが、原因を教えて頂けませんか。 ↓ Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
kochoru

2018/07/24 01:40 編集

スタックトレースを見ればエラーの原因はわかると思いますのでまず調べてください。
Sa10

2018/07/24 09:36

スタックトレースを確認したところ、 ↓ Cannot load driver class: org.postgresql.Driver postgresqlのDriverが見つからないと書いておりましたが、application.propertyにはpostgresqlに接続情報は載せております。 ロードできない原因をお教えいただいてもいいでしょうか。
kochoru

2018/07/25 00:20

そのまんまですね。別にメッセージには接続情報が見つかりませんとは出ていません。 org.postgreql.Driverをロードできませんでしたと言われているので、そもそもPostgresqlのJDBCドライバを依存ライブラリとして定義しているかどうかが怪しいと睨むのが筋です。 そしてその通り、pom.xmlに依存ライブラリとしてpostgresqlのJDBCドライバを記載していないかと思います。確認してみてください。
Sa10

2018/07/25 01:59

ありがとうございます。 postgresql-42.2.0.jre7を導入したところ、エラーはなくなりましたが、 http://localhost:8080 へのアクセスができません。 controllerでURLの指定はしていないため、間違っていないと思うのですが、 もし考えられる原因などがありましたらご教授お願い致します。
kochoru

2018/07/25 02:13

そしたらもう一度エラーメッセージを確認するといいと思います。 私もそれだけ言われてもわからないです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問