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

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

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

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

MyBatis

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

Spring Boot

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

Q&A

解決済

1回答

969閲覧

【Spring Boot】 MyBatis MapperにBeanが注入できないというエラーが解決できない

ikigamikita

総合スコア20

Java

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

MyBatis

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

Spring Boot

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

0グッド

0クリップ

投稿2024/06/12 04:41

編集2024/06/12 05:58

実現したいこと

MapperにBeanが注入できないというエラーを解決したい

前提

「後悔しないための」spring boot入門書」という参考書を見ながらその通りにサンプルコードを作成しています。
やっていることは、MyBatisを使ったデータベース操作です。
このアプリを実行すると、ApplicationContextの起動時にUserServiceImplクラスのmapperフィールドにUserMapper型のBeanがインジェクションできていないというようなエラーメッセージが発生し、解決しません。

どうかよろしくお願いします。

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

Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. 2024-06-12T13:18:27.550+09:00 ERROR 22908 --- [SpringBootSample3] [ restartedMain] o.s.b.d.LoggingFailureAnalysisReporter  : *************************** APPLICATION FAILED TO START *************************** Description: Field mapper in com.example.domain.user.service.impl.UserServiceImpl required a bean of type 'com.example.repository.UserMapper' that could not be found. The injection point has the following annotations: - @org.springframework.beans.factory.annotation.Autowired(required=true) Action: Consider defining a bean of type 'com.example.repository.UserMapper' in your configuration.

該当のソースコード

java

1package com.example.controller; 2 3import java.util.Locale; 4import java.util.Map; 5 6import org.modelmapper.ModelMapper; 7import org.springframework.beans.factory.annotation.Autowired; 8import org.springframework.stereotype.Controller; 9import org.springframework.ui.Model; 10import org.springframework.validation.BindingResult; 11import org.springframework.validation.annotation.Validated; 12import org.springframework.web.bind.annotation.GetMapping; 13import org.springframework.web.bind.annotation.ModelAttribute; 14import org.springframework.web.bind.annotation.PostMapping; 15import org.springframework.web.bind.annotation.RequestMapping; 16 17import com.example.application.service.UserApplicationService; 18import com.example.domain.user.model.MUser; 19import com.example.domain.user.service.UserService; 20import com.example.form.GroupOrder; 21//import com.example.form.GroupOrder; 22import com.example.form.SignupForm; 23 24import lombok.extern.slf4j.Slf4j; 25 26@Controller 27@RequestMapping("/user") 28//Slf4jはLombokのアノテーションです。これをクラスに付けるとSlf4jを使って、簡単にログ出力できます 29@Slf4j 30public class SignupController { 31 32 @Autowired 33 private UserApplicationService userApplicationService; 34 35 @Autowired 36 private UserService userService; 37 38 @Autowired 39 private ModelMapper modelMappeer; 40 41 42// ユーザー登録画面を表示 43 @GetMapping("/signup") 44 public String getSignup(Model model,Locale locale, 45 @ModelAttribute SignupForm form) { 46 47// 性別を取得 48 Map<String,Integer> genderMap=userApplicationService.getGenderMap(locale); 49 model.addAttribute("genderMap",genderMap); 50 51// ユーザー登録画面に遷移 52 return "user/signup"; 53// 54 } 55 56// ユーザー登録処理 57 @PostMapping("/signup") 58 public String postSignup(Model model,Locale locale, 59 @ModelAttribute @Validated(GroupOrder.class) SignupForm form, 60 BindingResult bindingResult) { 61 62// 入力チェック結果 63 if(bindingResult.hasErrors()) { 64 65// ユーザー画面に戻る 66 return getSignup(model,locale,form); 67 68 } 69 70 log.info(form.toString()); 71 72 //formをMUserクラスに変換 73 MUser user=modelMappeer.map(form,MUser.class); 74 75 //ユーザー登録 76 userService.signup(user); 77 78// ログイン画面にリダイレクト 79 return "redirect:/login"; 80 } 81 82 83 84 85} 86

java

1package com.example.config; 2import org.modelmapper.ModelMapper; 3import org.springframework.context.annotation.Bean; 4import org.springframework.context.annotation.Configuration; 5 6 7@Configuration 8public class javaConfig { 9 10 @Bean 11 public ModelMapper modelMapper() { 12 return new ModelMapper(); 13 } 14 15 16 17}

java

1package com.example.repository; 2 3import org.apache.ibatis.annotations.Mapper; 4 5import com.example.domain.user.model.MUser; 6 7//MyBatisでリポジトリーを作成するためには@Mapperアノテーションを付けます 8@Mapper 9public interface UserMapper { 10 11// ユーザー登録 12 public int insertOne(MUser user); 13 14}

java

1package com.example.domain.user.service; 2import com.example.domain.user.model.MUser; 3 4public interface UserService { 5 6// ユーザー登録 7 public void signup(MUser user); 8 9}

java

1package com.example.domain.user.model; 2 3import java.util.Date; 4 5//ユーザマスタのエンティティクラス 6//エンティティクラスとは、データベースのテーブルに対応するJavaクラスのことです。 7//エンティティクラスは、データベースのレコード(行)をオブジェクトとして扱うためのモデルを提供します。 8 9import lombok.Data; 10 11@Data 12public class MUser { 13 14 private String userId; 15 private String password; 16 private String userName; 17 private Date birthday; 18 private Integer age; 19 private Integer gender; 20 private Integer departmentId; 21 private String role; 22 23}

java

1package com.example.domain.user.service; 2import com.example.domain.user.model.MUser; 3 4public interface UserService { 5 6// ユーザー登録 7 public void signup(MUser user); 8 9} 10

java

1package com.example.domain.user.service.impl; 2 3import org.springframework.beans.factory.annotation.Autowired; 4import org.springframework.stereotype.Service; 5 6import com.example.domain.user.model.MUser; 7import com.example.domain.user.service.UserService; 8import com.example.repository.UserMapper; 9 10 11//ユーザーサービスの実装クラス 12@Service 13public class UserServiceImpl implements UserService{ 14 15 @Autowired 16 private UserMapper mapper; 17 18// ユーザー登録 19 20 @Override 21 public void signup(MUser user) { 22 user.setDepartmentId(1); //部署 23 user.setRole("ROLE_GENERAL"); 24 25 mapper.insertOne(user); 26 27 } 28 29} 30

xml

1<?xml version="1.0" encoding="UTF-8"?> 2 3<!DOCTYPE mapper 4 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 5 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 6 7<mapper namespace="com.example.repository.UserMapper"> 8 9 <insert id="insertOne" parameterType="com.example.domain.user.model.MUser"> 10 insert into m_user( 11 user_id, 12 password, 13 user_name, 14 birthday, 15 age, 16 gender, 17 department_id, 18 role 19 ) 20 values( 21 #{userId}, 22 #{password}, 23 #{userName}, 24 #{birthday}, 25 #{age}, 26 #{gender}, 27 #{departmentId}, 28 #{role} 29 ) 30 </insert> 31 32</mapper>

application.propertiesには、下記を記述してあります。

properties

1#MyBatis 2#この設定により、MyBatisはsrc/main/resources/mapper/h2/ディレクトリにある 3#すべてのXMLファイルをマッパーファイルとして読み込みます。 4mybatis.mapper-locations=classpath*:/mapper/h2/*.xml 5 6#Log Level 7#この設定により、com.exampleパッケージ内のクラスからのログメッセージは、 8#DEBUGレベル以上のものがすべて出力されます。 9logging.level.com.example=DEBUG

試したこと

調べたところSpringBootTest2Application.javaにて、@MapperScanアノテーションを使う方法など書いてありましたが上手く行かずエラーが増えていくだけでした。

試したこと2

spring boot の 3 系には mybatis の 3 系、 spring boot の 2 系には mybatis の 2 系でなければならないという情報を頂いたので、MyBatisのバージョンを3.0.2に書き換えてましたが、アプリ実行するとエラーになってしまいます。

イメージ説明

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

Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. 2024-06-12T14:46:17.842+09:00 ERROR 21036 --- [SpringBootSample3] [ restartedMain] o.s.boot.SpringApplication  : Application run failed java.lang.IllegalArgumentException: Invalid value type for attribute 'factoryBeanObjectType': java.lang.String at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getTypeForFactoryBeanFromAttributes(FactoryBeanRegistrySupport.java:86) ~[spring-beans-6.1.8.jar:6.1.8] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getTypeForFactoryBean(AbstractAutowireCapableBeanFactory.java:837) ~[spring-beans-6.1.8.jar:6.1.8] at org.springframework.beans.factory.support.AbstractBeanFactory.isTypeMatch(AbstractBeanFactory.java:663) ~[spring-beans-6.1.8.jar:6.1.8] at org.springframework.beans.factory.support.DefaultListableBeanFactory.doGetBeanNamesForType(DefaultListableBeanFactory.java:575) ~[spring-beans-6.1.8.jar:6.1.8] at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanNamesForType(DefaultListableBeanFactory.java:534) ~[spring-beans-6.1.8.jar:6.1.8] at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:138) ~[spring-context-6.1.8.jar:6.1.8] at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:788) ~[spring-context-6.1.8.jar:6.1.8] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:606) ~[spring-context-6.1.8.jar:6.1.8] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) ~[spring-boot-3.3.0.jar:3.3.0] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) ~ //省略

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

spring bootのバージョン;java3.3.0
javaのバージョン:22
MyBatisのバージョン:2.1.4
ModelMapperのバージョン:2.3.9

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

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

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

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

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

jimbe

2024/06/12 05:06

>参考書を見ながらその通りにサンプルコードを作成しています java や spring boot, mybatis 他のバージョン等も参考書通り全く同じにされているのでしょうか。
ikigamikita

2024/06/12 05:27 編集

コメントありがとうございます。 参考書通りのバージョンで実行すると 「Description: Field mapper in com.example.domain.user.service.impl.UserServiceImpl required a bean of type 'com.example.repository.UserMapper' that could not be found. The injection point has the following annotations: - @org.springframework.beans.factory.annotation.Autowired(required=true) Action: Consider defining a bean of type 'com.example.repository.UserMapper' in your configuration.」 というエラーになってしまいます。 MyBatisのバージョンを3.0.0や2.3.0に変えr手MAVENプロジェクトの更新をすると違うエラーが発生する状態です。 <!-- MyBatis Spring Boot Starter --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.4</version> </dependency> <!-- ModelMapper --> <dependency> <groupId>org.modelmapper.extensions</groupId> <artifactId>modelmapper-spring</artifactId> <version>2.3.9</version> </dependency>
jimbe

2024/06/12 05:28 編集

コメントが妙な文面になってしまっていますが^^; (teratail がまた何かやってるのかな?) [mybatis-spring-boot-autoconfigure] https://mybatis.org/spring-boot-starter/mybatis-spring-boot-autoconfigure/ を見ると spring boot の 3 系には mybatis の 3 系、 spring boot の 2 系には mybatis の 2 系でなければならないように見えますが、 spring boot の 3 系で mybatis の 2 系は正常に動くのでしょうか。
ikigamikita

2024/06/12 05:46

教えてくださりありがとうございます、試してみます。
jimbe

2024/06/12 07:02

amazon のレビューを見ましたが https://www.amazon.co.jp/%E5%BE%8C%E6%82%94%E3%81%97%E3%81%AA%E3%81%84%E3%81%9F%E3%82%81%E3%81%AESpring-Boot-%E5%85%A5%E9%96%80%E6%9B%B8%EF%BC%9ASpring-%E8%A7%A3%E4%BD%93%E6%96%B0%E6%9B%B8%EF%BC%88%E7%AC%AC2%E7%89%88%EF%BC%89-Spring%E8%A7%A3%E4%BD%93%E6%96%B0%E6%9B%B8-ebook/product-reviews/B08XPBPH9C/ref=cm_cr_dp_d_show_all_btm?ie=UTF8&reviewerType=all_reviews 正誤表等は無いらしく、コードを写経しても動かないと言われている人が多い感じがしますね。どこまで書籍通りにやってのことなのか分かりませんが。 一人だけ「動かないと言われているがそんなことはないと思う」と何とも言えない感想が書かれていましたが…。
guest

回答1

0

自己解決

jimbe様にヒントを頂き、色々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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 4 <modelVersion>4.0.0</modelVersion> 5 <parent> 6 <groupId>org.springframework.boot</groupId> 7 <artifactId>spring-boot-starter-parent</artifactId> 8 <version>3.0.0</version> 9 <relativePath/> <!-- lookup parent from repository --> 10 </parent> 11 <groupId>com.example</groupId> 12 <artifactId>SpringBootSample3</artifactId> 13 <version>0.0.1-SNAPSHOT</version> 14 <name>SpringBootSample3</name> 15 <description>Demo project for Spring Boot</description> 16 <properties> 17 <java.version>17</java.version> 18 </properties> 19 <dependencies> 20 <dependency> 21 <groupId>org.springframework.boot</groupId> 22 <artifactId>spring-boot-starter-data-jdbc</artifactId> 23 </dependency> 24 <dependency> 25 <groupId>org.springframework.boot</groupId> 26 <artifactId>spring-boot-starter-thymeleaf</artifactId> 27 </dependency> 28 <dependency> 29 <groupId>org.springframework.boot</groupId> 30 <artifactId>spring-boot-starter-web</artifactId> 31 </dependency> 32 33 <dependency> 34 <groupId>org.springframework.boot</groupId> 35 <artifactId>spring-boot-devtools</artifactId> 36 <scope>runtime</scope> 37 <optional>true</optional> 38 </dependency> 39 <dependency> 40 <groupId>com.h2database</groupId> 41 <artifactId>h2</artifactId> 42 <scope>runtime</scope> 43 </dependency> 44 <dependency> 45 <groupId>com.mysql</groupId> 46 <artifactId>mysql-connector-j</artifactId> 47 <scope>runtime</scope> 48 </dependency> 49 <dependency> 50 <groupId>org.projectlombok</groupId> 51 <artifactId>lombok</artifactId> 52 <optional>true</optional> 53 </dependency> 54 <dependency> 55 <groupId>org.springframework.boot</groupId> 56 <artifactId>spring-boot-starter-test</artifactId> 57 <scope>test</scope> 58 </dependency> 59 60 <!-- jQuery --> 61 <dependency> 62 <groupId>org.webjars</groupId> 63 <artifactId>jquery</artifactId> 64 <version>3.5.1</version> 65 </dependency> 66 67 <!-- bootstrap --> 68 <dependency> 69 <groupId>org.webjars</groupId> 70 <artifactId>bootstrap</artifactId> 71 <version>4.5.3</version> 72 </dependency> 73 74 <!-- webjars-locator --> 75 <dependency> 76 <groupId>org.webjars</groupId> 77 <artifactId>webjars-locator</artifactId> 78 <version>0.40</version> 79 </dependency> 80<!-- バリデーション--> 81 <dependency> 82 <groupId>org.springframework.boot</groupId> 83 <artifactId>spring-boot-starter-validation</artifactId> 84 </dependency> 85 <!-- thymeleaf-layout-dialect --> 86 <dependency> 87 <groupId>nz.net.ultraq.thymeleaf</groupId> 88 <artifactId>thymeleaf-layout-dialect</artifactId> 89 </dependency> 90 <!-- Spring Boot Starter for MyBatis --> 91 <dependency> 92 <groupId>org.mybatis.spring.boot</groupId> 93 <artifactId>mybatis-spring-boot-starter</artifactId> 94 <version>3.0.0</version> 95 </dependency> 96 <!-- ModelMapper --> 97 <dependency> 98 <groupId>org.modelmapper</groupId> 99 <artifactId>modelmapper</artifactId> 100 <version>2.3.9</version> 101 </dependency> 102 </dependencies> 103 104 <build> 105 <plugins> 106 <plugin> 107 <groupId>org.springframework.boot</groupId> 108 <artifactId>spring-boot-maven-plugin</artifactId> 109 <configuration> 110 <excludes> 111 <exclude> 112 <groupId>org.projectlombok</groupId> 113 <artifactId>lombok</artifactId> 114 </exclude> 115 </excludes> 116 </configuration> 117 </plugin> 118 </plugins> 119 </build> 120 121</project> 122

投稿2024/06/13 04:58

ikigamikita

総合スコア20

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

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

jimbe

2024/06/13 14:29

質問へのコメントでは >MyBatisのバージョンを3.0.0や と 94 行目を 3.0.0 にしても解決されなかったように書かれていますが、他にどこを変更されたのでしょうか。
ikigamikita

2024/06/14 02:11

それにつきましては、 解決したバージョンのpom.xmlでもjavaのバージョンを22に戻すとエラーになるため、javaのバージョン22がエラーの原因になっておりjava17だと上手く行くと考えております。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問