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

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

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

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

Java

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

MyBatis

MyBatisはJavaや.NET Frameworkでなどで使用できる、SQL文や、ストアドプロシージャをオブジェクトと紐付けるO/Rマッピングフレームワークです。

Spring Boot

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

Q&A

2回答

573閲覧

【springboot】@MapperアノテーションをつけているのにMapperが認識されないエラーについて

退会済みユーザー

退会済みユーザー

総合スコア0

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

Java

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

MyBatis

MyBatisはJavaや.NET Frameworkでなどで使用できる、SQL文や、ストアドプロシージャをオブジェクトと紐付けるO/Rマッピングフレームワークです。

Spring Boot

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

0グッド

0クリップ

投稿2024/06/13 13:14

編集2024/06/13 14:44

実現したいこと

javaのspringbootで@Mapperを指定しているのに、マッパーが見つからないというエラーが起きています。
エラーを解決する方法を教えてください。エラーの詳細は下記に記載しています。

・BookService.java
BookService.java
・BookMapper.java
BookMapper.java
・BookMapper.xml
BookMapper.xml
・ディレクトリ構成
ディレクトリ構成
・build.gradle
build.gradle
・application.properties
application.properties

発生している問題・分からないこと

下記のようなエラーが起きています。

エラー内容要約:
BookServiceクラス内のBookMapperフィールドに対する依存性注入が失敗しました。SpringコンテナがBookMapper型のBeanを見つけられないためです。BookMapperのBeanが適切に定義されていることを確認してください。

エラーメッセージ

error

1*************************** 2APPLICATION FAILED TO START 3*************************** 4 5Description: 6 7Field BookMapper in com.example.demo.service.BookService required a bean of type 'com.example.demo.repository.BookMapper' that could not be found. 8 9The injection point has the following annotations: 10 - @org.springframework.beans.factory.annotation.Autowired(required=true) 11 12 13Action: 14 15Consider defining a bean of type 'com.example.demo.repository.BookMapper' in your configuration. 16

該当のソースコード

画像も張っていますがこちらにコードも載せておきます。
サービスクラスで、BookMapperが見つからずにエラーが起きているようです。

BookService.java

1@Service 2public class BookService { 3 @Autowired 4 public BookMapper bookMapper; 5 6 public void delete(Long bookId){ 7 bookMapper.delete(bookId); 8 } 9} 10

BookMapper.xml

1<?xml version="1.0" encoding="UTF-8" ?> 2<!DOCTYPE mapper 3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 5 6<mapper namespace="com.example.demo.repository.BookMapper"> 7 8 <delete id="delete"> 9 delete from book 10 where id = #{bookId}; 11 </delete> 12</mapper>

BookMapper.java

1package com.example.demo.repository; 2 3import org.apache.ibatis.annotations.Mapper; 4 5@Mapper 6public interface BookMapper{ 7 8 void delete(Long bookId); 9 10}

application.properties

1spring.application.name=Book 2 3# MyBatis設定 4mybatis.config-location=classpath:mybatis-config.xml 5 6## 以下h2データベース 7spring.h2.console.enabled=true 8spring.datasource.url=jdbc:h2:mem:px_test;MODE=MYSQL 9spring.datasource.username=sa 10spring.datasource.password= 11spring.datasource.driverClassName=org.h2.Driver 12spring.datasource.initialization-mode=always 13#spring.datasource.schema=classpath:database/schema.sql 14#spring.datasource.data=classpath:database/data.sql 15spring.sql.init.schema-locations=classpath:database/schema.sql 16spring.sql.init.data-locations=classpath:database/data.sql 17spring.datasource.platform=h2 18spring.h2.console.path=/h2-console

build.gradle

1plugins { 2 id 'java' 3 id 'org.springframework.boot' version '3.3.0' 4 id 'io.spring.dependency-management' version '1.1.5' 5} 6 7group = 'com.example' 8version = '0.0.1-SNAPSHOT' 9 10java { 11 sourceCompatibility = '21' 12} 13 14configurations { 15 compileOnly { 16 extendsFrom annotationProcessor 17 } 18} 19 20repositories { 21 mavenCentral() 22} 23 24dependencies { 25 26 implementation 'org.springframework.boot:spring-boot-starter-data-jdbc' 27 implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' 28 implementation 'org.springframework.boot:spring-boot-starter-validation' 29 implementation 'org.springframework.boot:spring-boot-starter-web' 30 implementation 'org.springframework.boot:spring-boot-starter-data-jpa' 31 implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.2.0' 32 compileOnly 'org.projectlombok:lombok' 33 developmentOnly 'org.springframework.boot:spring-boot-devtools' 34 runtimeOnly 'com.h2database:h2' 35 runtimeOnly 'com.mysql:mysql-connector-j' 36 annotationProcessor 'org.projectlombok:lombok' 37 testImplementation 'org.springframework.boot:spring-boot-starter-test' 38 testRuntimeOnly 'org.junit.platform:junit-platform-launcher' 39} 40 41tasks.named('test') { 42 useJUnitPlatform() 43}

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

解決策が見つかりませんでした

補足

特になし

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

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

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

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

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

jimbe

2024/06/13 14:21 編集

最近立て続けに同じような質問がある気がするのですが…。 参考にされている資料とか、ご自身の環境等を(質問を編集して"補足"の所にでも)ご提示ください。 また、テキストとしてコピペ出来るものは(画像では無く)テキストでご提示ください。画像で示されても検索用に一部をコピペしたりが出来ませんし、コードを試そうにも手入力で間違える可能性があります。
退会済みユーザー

退会済みユーザー

2024/06/13 14:45

ご回答ありがとうございます。前回回答がつかなかったため、文章がわかりにくいと思い作り直して投稿させていただきました。コードも追加しました。何かわかりましたら、アドバイスいただけると嬉しいです。
jimbe

2024/06/13 15:07 編集

>前回回答がつかなかった こちらの ID の履歴を見ると初めての質問だと表示されていますが…もし複薄の ID を作成されたのでしたら、 teratail の規約違反になると思います。 また、文章がわかりにくいと思われたのでしたら、その質問を編集してください。同じ質問を何度も作成することは SPAM 的に思われます。 回答する側も質問する側と同じ単なる teratail のユーザーですので、たまたま目に留まらなかったり、それぞれの理由で回答出来なかったりします。 問題を抱えたままでいるのは大変でしょうが、ご自身での調査を優先して進められて、運が良ければ…程度に思われたほうが少しはラクかもしれません。 で、もう一度書きますが、参考にされている資料やコードの元になったもの、ご自身の環境等を(質問を編集して"補足"の所にでも)ご提示ください。 [3-6. あなたがプログラミングで利用している環境を書きましょう] https://teratail.com/help/question-tips#questionTips36 追加で、この問題についでどこまで調査や試しをされたのかもお願いします。 ("調べました、分かりませんでした"では何を調べて何が分からなかったのか分かりません。ネットを検索したのならどのようなサイトが見つかり、何をして何が起きたのか、サイト内の何が分からなかったのか等、極力具体的に教えてください。) [3-5. あなたが何をしたかを書きましょう] https://teratail.com/help/question-tips#questionTips35 また、テキストとしてコピペ出来るものは(画像では無く)テキストでご提示ください。画像で示されても検索用に一部をコピペしたりが出来ませんし、コードを試そうにも手入力で間違える可能性があります。
TN8001

2024/06/13 15:14

[java - @Mapperアノテーションをつけているのにマッパーが見つからない - スタック・オーバーフロー](https://ja.stackoverflow.com/questions/99564) > teratailでは、マルチポスト※の推奨はしていません。 > やむを得ず複数のサイトに質問を投稿された場合は、質問内容にマルチポストをする理由を書き、他のサイトの投稿へのリンクを貼ってください。 また、解決した際には必ずteratail及びすべての投稿に解決した旨と、どのように解決したかを記載してください。 [ヘルプ|teratail【テラテイル】](https://teratail.com/help#posted-otherservice)
guest

回答2

0

BookMapperインターフェースに@Repository、または@Componentアノテーションをつけてみてはどうでしょうか。

Java

1@Mapper 2@Repository 3public interface BookMapper{

DIコンテナにBookMapperのインスタンスが登録するための処理やアノテーションが足りていないからだと思われますがいかがでしょうか

投稿2024/06/19 17:55

kiino

総合スコア557

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

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

0

*修正MyBatisを使った経験がなかったので変なことを言いましたね、誠にすみませんでした
原因はapplication.propertiesの問題だと思われます。

mybatis.config-location:classpath:mybatis-config.xml部分は、MyBatis設定ファイルのディレクトリ位置を示しますが、ここでのclasspathとは/src/resourceを指します。ディレクトリ構成から見ると、そのようなファイルはないのでエラーガ発生したと考えられます。
多分src/resourcesディレクトリにmybatis-config.xmlを作成しmapper.xmlの内容を移すと解決出来ると思いますが、以前の構造を保ちながらタイプエイリアスを使ってmybatis-config.xmlにインポートさせる方が拡張性の良い方法だと思います

投稿2024/06/20 01:13

編集2024/06/20 05:54
Paracel

総合スコア2

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問