riku__02
@riku__02

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Spring bootにてMy Batisを利用しinsert部分作成中における質問

解決したいこと

Spring解体新書という書籍で8章部分を実施中です。
この章の内容としてはMyBatisについての学習していく章であり、まずinsertを実装するための流れですが、起動時にエラーが起こっていて原因がつかめないので解決方法を教えてください。

発生している問題・エラー

org.springframework.beans.factory.BeanDefinitionStoreException: Invalid bean definition with name 'userMapper' defined in file [C:\Users\User\Documents\workspace-spring-tool-suite-4-4.24.0.RELEASE\SpringBootSample\target\classes\com\example\demo\repository\UserMapper.class]: Invalid value type for attribute 'factoryBeanObjectType': java.lang.String
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getTypeForFactoryBean(AbstractAutowireCapableBeanFactory.java:857) ~[spring-beans-6.1.13.jar:6.1.13]
	at org.springframework.beans.factory.support.AbstractBeanFactory.getType(AbstractBeanFactory.java:743) ~[spring-beans-6.1.13.jar:6.1.13]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAnnotationOnBean(DefaultListableBeanFactory.java:735) ~[spring-beans-6.1.13.jar:6.1.13]
	at org.springframework.boot.sql.init.dependency.AnnotationDependsOnDatabaseInitializationDetector.detect(AnnotationDependsOnDatabaseInitializationDetector.java:36) ~[spring-boot-3.3.4.jar:3.3.4]
	at org.springframework.boot.sql.init.dependency.DatabaseInitializationDependencyConfigurer$DependsOnDatabaseInitializationPostProcessor.detectDependsOnInitializationBeanNames(DatabaseInitializationDependencyConfigurer.java:152) ~[spring-boot-3.3.4.jar:3.3.4]
	at org.springframework.boot.sql.init.dependency.DatabaseInitializationDependencyConfigurer$DependsOnDatabaseInitializationPostProcessor.postProcessBeanFactory(DatabaseInitializationDependencyConfigurer.java:115) ~[spring-boot-3.3.4.jar:3.3.4]
	at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:363) ~[spring-context-6.1.13.jar:6.1.13]
	at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:197) ~[spring-context-6.1.13.jar:6.1.13]
	at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:789) ~[spring-context-6.1.13.jar:6.1.13]
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:607) ~[spring-context-6.1.13.jar:6.1.13]
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) ~[spring-boot-3.3.4.jar:3.3.4]
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) ~[spring-boot-3.3.4.jar:3.3.4]
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456) ~[spring-boot-3.3.4.jar:3.3.4]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:335) ~[spring-boot-3.3.4.jar:3.3.4]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1363) ~[spring-boot-3.3.4.jar:3.3.4]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1352) ~[spring-boot-3.3.4.jar:3.3.4]
	at com.example.demo.SpringBootSample1Application.main(SpringBootSample1Application.java:10) ~[classes/:na]
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na]
	at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na]
	at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:50) ~[spring-boot-devtools-3.3.4.jar:3.3.4]


関連しそうなソースコード

■UserMapper.java

package com.example.demo.repository;

import org.apache.ibatis.annotations.Mapper;

import com.example.demo.domain.user.model.MUser;

@Mapper
public interface UserMapper {
	/*ユーザ登録*/
	public int insertOne(MUser user);
	
}

■JavaConfig.java

package com.example.demo.config;

import org.modelmapper.ModelMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class JavaConfig {
	
	@Bean
	public ModelMapper modelMapper() {
		return new ModelMapper();
	}
}

■SignupController.java

package com.example.demo.controller;

import java.util.Locale;
import java.util.Map;

import org.modelmapper.ModelMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import com.example.demo.application.service.UserApplicationService;
import com.example.demo.domain.service.UserService;
import com.example.demo.domain.user.model.MUser;
import com.example.demo.form.GroupOrder;
import com.example.demo.form.SignupForm;

import lombok.extern.slf4j.Slf4j;

@Controller
@RequestMapping("/user")
@Slf4j
public class SignupController {

	@Autowired
	private UserApplicationService userApplicationService;

	@Autowired
	private UserService userService;

	@Autowired
	private ModelMapper modelMapper;

	/**ユーザ登録画面を表示*/
	@GetMapping("/signup")
	public String getSignup(Model model, Locale locale, @ModelAttribute SignupForm form) {
		//性別を取得
		Map<String, Integer> genderMap = userApplicationService.getGendermap(locale);
		model.addAttribute("genderMap", genderMap);

		//ユーザ登録画面に遷移
		return "user/signup";
	}

	/**ユーザ登録処理*/
	@PostMapping("/signup")

	public String postSignup(Model model, Locale locale, @ModelAttribute @Validated(GroupOrder.class) SignupForm form,
			BindingResult bindingResult) {

		//入力チェック結果
		if (bindingResult.hasErrors()) {
			//NG:ユーザ登録画面に戻ります
			return getSignup(model, locale, form);
		}
		log.info(form.toString());

		//formをMUserクラスに変換
		MUser user = modelMapper.map(form, MUser.class);

		//ユーザ登録
		userService.signup(user);

		//ログイン画面にリダイレクト
		return "redirect:/login";
	}
}

■UserMapper.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とxmlのマッピング-->
<mapper namespace="com.example.demo.repository.UserMapper">

<!-- ユーザ1件登録-->
<insert id="insertOne">
insert into m_user(
	user_id
	,password
	,user_name
	,birthday
	,age
	,gender
	department_id
	,role
)
values (
	#{userId}
	,#{password}
	,#{userName}
	,#{birthday}
	,#{age}
	,#{gender}
	,#{department_Id}
	,#{role}
)
</insert>
</mapper>

■schema.sql

CREATE TABLE IF NOT EXISTS employee (
	id VARCHAR(50)PRIMARY KEY,
	name VARCHAR(50),
	age INT
);

/*ユーザマスタ*/
CREATE TABLE IF NOT EXISTS m_user {
	user_id VARCHAR(50) PRIMARY KEY
	,password VARCHAR(100)
	,user_name VARCHAR(50)
	,birthday DATE
	,age INT
	,gender INT
	,dapartment_id INT
	,role VARCHAR(50)
};

/*部署マスタ*/
CREATE TABLE IF NOT EXISTS m_department (
	department_id INT PRIMARY KEY
	,department_name VARCHAR(50)
);

/*給料テーブル*/
CREATE TABLE IF NOT EXISTS t_salary (
	user_id VARCHAR(50)
	,year_month VARCHAR(50)
	,salary INT
	,PRIMARY KEY(user_id, year_month)
);

構成キャプチャ
image.png

自分で試したこと

エラーをネットで調べてbean名が競合などヒットしましたが、解決案に辿りつけていない状態です。
アドバイス等頂けると幸いです。

0

2Answer

@riku__02 さん
UserMapper.xmlの情報が欲しいです。

エラーの内容から想像しただけなので、解決案になっているか自信ないですが、
以下の話が関係している気がします。

正(正しい状態)

UserMapper.xml
<mapper namespace="com.example.repository.UserMapper">

誤(今の状態)

UserMapper.xml
<mapper namespace="com.example.repository.userMapper">

以下のようなバージョンが原因の場合もあるかもしれませんが、
他よりは可能性が低いかと思います。

1Like

Comments

  1. @riku__02

    Questioner

    @eno49conanさん
    こんばんは!ご回答ありがとうございます。
    UserMapper.xmlの内容を記載いたしました。
    ご指摘頂いている場所は正になっていそうですが
    添付頂いた内容のようにversionを3.0.3に変更したところエラーが変わった気がします。。

    org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'signupController': Unsatisfied dependency expressed through field 'userService': Error creating bean with name 'userServiceImpl': Unsatisfied dependency expressed through field 'mapper': Error creating bean with name 'userMapper' defined in file [C:\Users\User\Documents\workspace-spring-tool-suite-4-4.24.0.RELEASE\SpringBootSample\target\classes\com\example\demo\repository\UserMapper.class]: Cannot resolve reference to bean 'sqlSessionTemplate' while setting bean property 'sqlSessionTemplate'
    	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:788) ~[spring-beans-6.1.13.jar:6.1.13]
    	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:768) ~[spring-beans-6.1.13.jar:6.1.13]
    	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:145) ~[spring-beans-6.1.13.jar:6.1.13]
    	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:509) ~[spring-beans-6.1.13.jar:6.1.13]
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1439) ~[spring-beans-6.1.13.jar:6.1.13]
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) ~[spring-beans-6.1.13.jar:6.1.13]
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522) ~[spring-beans-6.1.13.jar:6.1.13]
    	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:337) ~[spring-beans-6.1.13.jar:6.1.13]
    	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-6.1.13.jar:6.1.13]
    	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:335) ~[spring-beans-6.1.13.jar:6.1.13]
    	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[spring-beans-6.1.13.jar:6.1.13]
    	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:975) ~[spring-beans-6.1.13.jar:6.1.13]
    	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:971) ~[spring-context-6.1.13.jar:6.1.13]
    	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:625) ~[spring-context-6.1.13.jar:6.1.13]
    	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) ~[spring-boot-3.3.4.jar:3.3.4]
    	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) ~[spring-boot-3.3.4.jar:3.3.4]
    	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456) ~[spring-boot-3.3.4.jar:3.3.4]
    	at org.springframework.boot.SpringApplication.run(SpringApplication.java:335) ~[spring-boot-3.3.4.jar:3.3.4]
    	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1363) ~[spring-boot-3.3.4.jar:3.3.4]
    	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1352) ~[spring-boot-3.3.4.jar:3.3.4]
    	at com.example.demo.SpringBootSample1Application.main(SpringBootSample1Application.java:10) ~[classes/:na]
    	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na]
    	at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na]
    	at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:50) ~[spring-boot-devtools-3.3.4.jar:3.3.4]
    Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'userServiceImpl': Unsatisfied dependency expressed through field 'mapper': Error creating bean with name 'userMapper' defined in file [C:\Users\User\Documents\workspace-spring-tool-suite-4-4.24.0.RELEASE\SpringBootSample\target\classes\com\example\demo\repository\UserMapper.class]: Cannot resolve reference to bean 'sqlSessionTemplate' while setting bean property 'sqlSessionTemplate'
    	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:788) ~[spring-beans-6.1.13.jar:6.1.13]
    	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:768) ~[spring-beans-6.1.13.jar:6.1.13]
    	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:145) ~[spring-beans-6.1.13.jar:6.1.13]
    	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:509) ~[spring-beans-6.1.13.jar:6.1.13]
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1439) ~[spring-beans-6.1.13.jar:6.1.13]
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) ~[spring-beans-6.1.13.jar:6.1.13]
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522) ~[spring-beans-6.1.13.jar:6.1.13]
    	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:337) ~[spring-beans-6.1.13.jar:6.1.13]
    	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-6.1.13.jar:6.1.13]
    	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:335) ~[spring-beans-6.1.13.jar:6.1.13]
    	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[spring-beans-6.1.13.jar:6.1.13]
    	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:254) ~[spring-beans-6.1.13.jar:6.1.13]
    	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1443) ~[spring-beans-6.1.13.jar:6.1.13]
    	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1353) ~[spring-beans-6.1.13.jar:6.1.13]
    	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:785) ~[spring-beans-6.1.13.jar:6.1.13]
    	... 23 common frames omitted
    Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userMapper' defined in file [C:\Users\User\Documents\workspace-spring-tool-suite-4-4.24.0.RELEASE\SpringBootSample\target\classes\com\example\demo\repository\UserMapper.class]: Cannot resolve reference to bean 'sqlSessionTemplate' while setting bean property 'sqlSessionTemplate'
    	at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:377) ~[spring-beans-6.1.13.jar:6.1.13]
    	at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:135) ~[spring-beans-6.1.13.jar:6.1.13]
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1705) ~[spring-beans-6.1.13.jar:6.1.13]
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1454) ~[spring-beans-6.1.13.jar:6.1.13]
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) ~[spring-beans-6.1.13.jar:6.1.13]
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522) ~[spring-beans-6.1.13.jar:6.1.13]
    	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:337) ~[spring-beans-6.1.13.jar:6.1.13]
    	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-6.1.13.jar:6.1.13]
    	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:335) ~[spring-beans-6.1.13.jar:6.1.13]
    	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[spring-beans-6.1.13.jar:6.1.13]
    	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:254) ~[spring-beans-6.1.13.jar:6.1.13]
    	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1443) ~[spring-beans-6.1.13.jar:6.1.13]
    	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1353) ~[spring-beans-6.1.13.jar:6.1.13]
    	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:785) ~[spring-beans-6.1.13.jar:6.1.13]
    	... 37 common frames omitted
    Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSourceScriptDatabaseInitializer' defined in class path resource [org/springframework/boot/autoconfigure/sql/init/DataSourceInitializationConfiguration.class]: Failed to execute SQL script statement #2 of file [C:\Users\User\Documents\workspace-spring-tool-suite-4-4.24.0.RELEASE\SpringBootSample\target\classes\schema.sql]: CREATE TABLE IF NOT EXISTS m_user { user_id VARCHAR(50) PRIMARY KEY ,password VARCHAR(100) ,user_name VARCHAR(100) ,birthday DATE ,age INT ,gender INT ,dapartment_id INT ,role VARCHAR(50) } CREATE TABLE IF NOT EXISTS m_department ( department_id INT PRIMARY KEY ,department_name VARCHAR(50) )
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1806) ~[spring-beans-6.1.13.jar:6.1.13]
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:600) ~[spring-beans-6.1.13.jar:6.1.13]
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522) ~[spring-beans-6.1.13.jar:6.1.13]
    	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:337) ~[spring-beans-6.1.13.jar:6.1.13]
    	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-6.1.13.jar:6.1.13]
    	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:335) ~[spring-beans-6.1.13.jar:6.1.13]
    	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[spring-beans-6.1.13.jar:6.1.13]
    	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:313) ~[spring-beans-6.1.13.jar:6.1.13]
    	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[spring-beans-6.1.13.jar:6.1.13]
    	at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:365) ~[spring-beans-6.1.13.jar:6.1.13]
    	... 50 common frames omitted
    Caused by: org.springframework.jdbc.datasource.init.ScriptStatementFailedException: Failed to execute SQL script statement #2 of file [C:\Users\User\Documents\workspace-spring-tool-suite-4-4.24.0.RELEASE\SpringBootSample\target\classes\schema.sql]: CREATE TABLE IF NOT EXISTS m_user { user_id VARCHAR(50) PRIMARY KEY ,password VARCHAR(100) ,user_name VARCHAR(100) ,birthday DATE ,age INT ,gender INT ,dapartment_id INT ,role VARCHAR(50) } CREATE TABLE IF NOT EXISTS m_department ( department_id INT PRIMARY KEY ,department_name VARCHAR(50) )
    	at org.springframework.jdbc.datasource.init.ScriptUtils.executeSqlScript(ScriptUtils.java:282) ~[spring-jdbc-6.1.13.jar:6.1.13]
    	at org.springframework.jdbc.datasource.init.ResourceDatabasePopulator.populate(ResourceDatabasePopulator.java:254) ~[spring-jdbc-6.1.13.jar:6.1.13]
    	at org.springframework.jdbc.datasource.init.DatabasePopulatorUtils.execute(DatabasePopulatorUtils.java:54) ~[spring-jdbc-6.1.13.jar:6.1.13]
    	at org.springframework.boot.jdbc.init.DataSourceScriptDatabaseInitializer.runScripts(DataSourceScriptDatabaseInitializer.java:87) ~[spring-boot-3.3.4.jar:3.3.4]
    	at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.runScripts(AbstractScriptDatabaseInitializer.java:146) ~[spring-boot-3.3.4.jar:3.3.4]
    	at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.applyScripts(AbstractScriptDatabaseInitializer.java:108) ~[spring-boot-3.3.4.jar:3.3.4]
    	at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.applySchemaScripts(AbstractScriptDatabaseInitializer.java:98) ~[spring-boot-3.3.4.jar:3.3.4]
    	at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.initializeDatabase(AbstractScriptDatabaseInitializer.java:76) ~[spring-boot-3.3.4.jar:3.3.4]
    	at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.afterPropertiesSet(AbstractScriptDatabaseInitializer.java:66) ~[spring-boot-3.3.4.jar:3.3.4]
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1853) ~[spring-beans-6.1.13.jar:6.1.13]
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1802) ~[spring-beans-6.1.13.jar:6.1.13]
    	... 59 common frames omitted
    Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: SQLステートメントに文法エラーがあります "CREATE TABLE IF NOT EXISTS m_user   [*]user_id VARCHAR(50) PRIMARY KEY ,password VARCHAR(100) ,user_name VARCHAR(100) ,birthday DATE ,age INT ,gender INT ,dapartment_id INT ,role VARCHAR(50)   CREATE TABLE IF NOT EXISTS m_department ( department_id INT PRIMARY KEY ,department_name VARCHAR(50) )"
    Syntax error in SQL statement "CREATE TABLE IF NOT EXISTS m_user   [*]user_id VARCHAR(50) PRIMARY KEY ,password VARCHAR(100) ,user_name VARCHAR(100) ,birthday DATE ,age INT ,gender INT ,dapartment_id INT ,role VARCHAR(50)   CREATE TABLE IF NOT EXISTS m_department ( department_id INT PRIMARY KEY ,department_name VARCHAR(50) )"; SQL statement:
    CREATE TABLE IF NOT EXISTS m_user   user_id VARCHAR(50) PRIMARY KEY ,password VARCHAR(100) ,user_name VARCHAR(100) ,birthday DATE ,age INT ,gender INT ,dapartment_id INT ,role VARCHAR(50)   CREATE TABLE IF NOT EXISTS m_department ( department_id INT PRIMARY KEY ,department_name VARCHAR(50) ) [42000-224]
    	at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) ~[h2-2.2.224.jar:2.2.224]
    	at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) ~[h2-2.2.224.jar:2.2.224]
    	at org.h2.message.DbException.get(DbException.java:223) ~[h2-2.2.224.jar:2.2.224]
    	at org.h2.message.DbException.get(DbException.java:199) ~[h2-2.2.224.jar:2.2.224]
    	at org.h2.message.DbException.getSyntaxError(DbException.java:247) ~[h2-2.2.224.jar:2.2.224]
    	at org.h2.command.ParserBase.getSyntaxError(ParserBase.java:748) ~[h2-2.2.224.jar:2.2.224]
    	at org.h2.command.Parser.prepareCommand(Parser.java:486) ~[h2-2.2.224.jar:2.2.224]
    	at org.h2.engine.SessionLocal.prepareLocal(SessionLocal.java:639) ~[h2-2.2.224.jar:2.2.224]
    	at org.h2.engine.SessionLocal.prepareCommand(SessionLocal.java:559) ~[h2-2.2.224.jar:2.2.224]
    	at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1166) ~[h2-2.2.224.jar:2.2.224]
    	at org.h2.jdbc.JdbcStatement.executeInternal(JdbcStatement.java:245) ~[h2-2.2.224.jar:2.2.224]
    	at org.h2.jdbc.JdbcStatement.execute(JdbcStatement.java:231) ~[h2-2.2.224.jar:2.2.224]
    	at com.zaxxer.hikari.pool.ProxyStatement.execute(ProxyStatement.java:94) ~[HikariCP-5.1.0.jar:na]
    	at com.zaxxer.hikari.pool.HikariProxyStatement.execute(HikariProxyStatement.java) ~[HikariCP-5.1.0.jar:na]
    	at org.springframework.jdbc.datasource.init.ScriptUtils.executeSqlScript(ScriptUtils.java:261) ~[spring-jdbc-6.1.13.jar:6.1.13]
    	... 69 common frames omitted
    
  2. UserMapper.xmlで気になった箇所が3つあります。

    1.スペースの追加
    以下の行ですが、行数のところにエラー(×みたいなもの)でていませんか?

    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    

    "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"の間にスペース必要だと思います。

    2.カンマの追加
    genderdepartment_idの間にカンマがありません。(SQLの構文エラー)

    insert into m_user(
    	user_id
    	,password
    	,user_name
    	,birthday
    	,age
    	,gender
    	department_id
    	,role
    )
    

    3.MUserクラスのフィールド名に沿った変数名に
    department_Idではなく、departmentIdではないでしょうか。キャメルケースのはずなので。

    values (
    	#{userId}
    	,#{password}
    	,#{userName}
    	,#{birthday}
    	,#{age}
    	,#{gender}
    	,#{department_Id}
    	,#{role}
    )
    
  3. ちなみにこの書籍、最初か最後にサンプルコードってないでしょうか。
    MyBatisの話も入ってくると、回答するのも難しくなってくるケースが増えるはずなので、
    もしサンプルコードがあれば、それと比較して、自分のコードのどこかが間違っているか確認する方がよさそうな気がしました。

  4. @riku__02

    Questioner

    @eno49conan さんおはようございます!
    ①につきまして後方文に下線がでていたのでスペース入れたところ直りました。
    ありがとうございます。書籍では段落になっていたのでスペースと気づけませんでした。。
    ②、③につきましては私の見落としです。。ご指摘ありがとうございます。
    修正後もエラーは変わりませんでした。

    恥ずかしながらサンプルソースが存在しているということを初めて知りました。
    また、サンプルソースがあったのでurl添付させて頂きます。(現在8章の8-2-1着手中)
    頼るばかりではなくwinmarge等で自分の方で比較も実施しようと思います。

  5. 購入者特典かどうか分からないですが、
    Urlをここに貼り付けるのは良くないかも知れない(okと断言ができない)ので、消しておきましょうか。。

  6. @riku__02

    Questioner

    @eno49conanさん
    そうですね、、さすがに消しておきます。。
    本日業後再度サンプルソースと比較し、確認行おうと思いいます。
    毎度アドバイス、ご返信ありがとうございます!

  7. これはついでになるので、参考になるかも!と思ったらやってみてください。
    (今回のエラー解決というよりはも少し長い目で見た話)

    今取り組まれている書籍について、自分の取り組みをgitリポジトリで管理されてみる方法をおすすめします。(SE3年目とのことなので、おそらくgitはご存じかと思います。)

    節単位くらいで、自分の成果物をCommitします。
    (Commitメッセージには、気づきなどを書いてみる)

    また、途中でエラーが発生した場合、以下の手順でとります。

    1. エラー内容を、新規作成したテキストファイルに貼り付け
    2. その状態でCommit(Commitメッセージに、エラー概要を記載)
    3. エラーが解決したら、再度Commit(Commitメッセージに発生原因と解決にいたった修正概要を記載)

    めんどくせー、ってなるかもしれませんが、後々復習する際に良い教材にはなることだけは経験から断言できます

  8. {}がSQL構文として間違ってますね。

    CREATE TABLE IF NOT EXISTS m_user {
    	user_id VARCHAR(50) PRIMARY KEY
    	,password VARCHAR(100)
    	,user_name VARCHAR(50)
    	,birthday DATE
    	,age INT
    	,gender INT
    	,dapartment_id INT
    	,role VARCHAR(50)
    };
    
  9. @riku__02

    Questioner

    @eno49conan さん
    こんばんは!お疲れ様です。

    今はqiitaに質問として残すことで取り組みを残していこうと思っていましたが、ソースとかは最新しか残っていない状態でした。。

    今現場ではsvnが管理ツールです、、
    gitは以前スクール通っていた時に触ったくらいなのでこれを機にgitを自己学習で触っていこうと思います!

    下積みにとってとても大事なことだと思いましたし、アドバイスありがとうございます。
    本日から実践していこうと思います🙇‍♂️

    またSQL確かに間違えています。。
    {}⇨()ですね。
    ご指摘ありがとうございます。
    修正して再度起動してみます。

@eno49conanさん
sqlの{}を()に修正後起動で、次のエラー発生。綴りの間違いを発見したので、修正しユーザ登録が実施できるようになりました、、!!
今回もアドバイス頂きありがとうございました。
単純なミスが多いこと実感しています。。gitに記録しながら進めていきます。
ありがとうございました!先に進みます:bow_tone2:

1Like

Your answer might help someone💌