###実現したいこと
SpringBoot初心者です。現在、「Spring解体新書第2版」を用いて、Spring Bootの学習をしています。
その中で、MayBatisを使用してデータベースを操作するというセクションがあるのですが、
そこで現在つまづいています。
結論↓
アプリケーションを実行すると、エラーが発生し、動作しない状態でございます。
内容を下記に載せますので、どうかご教授いただけないでしょうか。
###エラー内容
// エラー内容 Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'scriptDataSourceInitializer' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceInitializationConfiguration$SharedCredentialsDataSourceInitializationConfiguration.class]: Invocation of init method failed; nested exception is org.springframework.jdbc.datasource.init.ScriptStatementFailedException: Failed to execute SQL script statement #2 of class path resource [schema.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, department_id INT, role VARCHAR(50)); nested exception is org.h2.jdbc.JdbcSQLSyntaxErrorException: 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, DEPARTMENT_ID INT, ROLE 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(50), BIRTHDAY DATE, AGE INT, GENDER INT, DEPARTMENT_ID INT, ROLE VARCHAR(50))"; SQL statement:
schemaSql
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, department_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_monthes VARCHAR(50), salary INT, PRIMARY KEY(user_id, year_monthes));
dataSql
INSERT INTO employee (id, name, age) VALUES('1', 'Tom', 30); # ユーザーマスタ INSERT INTO m_user ( user_id, password, user_name, birthday, age, gender, department_id, role ) VALUES ( 'system@co.jp', 'password', 'システム管理者', '2000-01-01', 21, 1, 1, 'ROLE_ADMIN' ), ( 'user@co.jp', 'password', 'ユーザー1', '2000-01-01', 21, 2, 2, 'ROLE_GENERAL' ); # 部署マスタ INSERT INTO m_department ( department_id, department_name ) VALUES (1, 'システム管理部'), (2, '営業部'); # 給料テーブル INSERT INTO t_salay ( user_id, year_monthes, salay ) VALUES ('user@co.jp', '2020/11', 280000), ('user@co.jp', '2020/12', 290000), ('user@co.jp', '2021/01', 300000);
applicationProperties
spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE spring.datasource.driver-class-name=org.h2.Driver spring.datasource.username=sa spring.datasource.password= spring.datasource.sql-script-encoding=UTF-8 spring.datasource.initialize=true spring.datasource.schema=classpath:schema.sql spring.datasource.data=classpath:data.sql # H2DB spring.h2.console.enabled=true #message spring.messages.basename=i18n/messages,i18n/ValidationMessages # MyBatis mybatis.mapper-locations=classpath*:/mapper/h2/*.xml # Log Level logging.level.com.example.demo=debug
UserMapperXml
<?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}, #{departmentId}, #{role} ) </insert> </mapper>
###考えられること
明らかに「syntaxError」と出ているので、文法関係のエラーではないかと睨んでいるのですが、
文法、誤字脱字等は、特に見受けられませんでした。
また、他のサイトにはapplicationPropertiesの設定による影響というのもあったのですが、試しても変わらずです。
UserMapper.xmlを作成した際から、上記エラーが発生しました。
どうぞご教授お願い致します。
まだ回答がついていません
会員登録して回答してみよう