実現したいこと
javaのspringbootで@Mapperを指定しているのに、マッパーが見つからないというエラーが起きています。
エラーを解決する方法を教えてください。エラーの詳細は下記に記載しています。
・BookService.java
・BookMapper.java
・BookMapper.xml
・ディレクトリ構成
・build.gradle
・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等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
解決策が見つかりませんでした
補足
特になし