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

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

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

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

MyBatis

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

Spring Boot

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

Q&A

解決済

1回答

3995閲覧

Mybatis連携によるレコード追加で、特定のカラムのみデータ登録できない

tk_19287

総合スコア18

Java

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

MyBatis

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

Spring Boot

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

0グッド

1クリップ

投稿2019/07/02 08:58

環境

Spring Boot 2.1.6
MyBatis 2.0.1
Java 12
H2
Spring Tool Suite 3.9.9

やりたいこと

こちらのサイトを参考にして、MyBatis連携によるH2のテーブルにレコードを追加する処理を作成しました。
mybatis-spring-boot-starterの使い方(qiita)

しかし、タイトルのようにlogin_idのカラムのみ値がnullしか設定されません。
他のauto_incrementで値設定しているidやpasswordはきちんとデータが設定されています。
作成したソースが以下になります。
TestMapper.java

Java

1package com.example.demo.mybatistest; 2 3import org.apache.ibatis.annotations.Insert; 4import org.apache.ibatis.annotations.Mapper; 5import org.apache.ibatis.annotations.Options; 6import org.apache.ibatis.annotations.Select; 7 8@Mapper 9public interface TestMapper { 10 11 @Insert("INSERT INTO user (login_id, password) values (#{loginId}, #{password})") 12 @Options(useGeneratedKeys = true, keyProperty = "id") 13 void insert(User user); 14 15 @Select("SELECT * FROM user WHERE id = #{id}") 16 User select(int id); 17}

User.java

Java

1package com.example.demo.mybatistest; 2 3import lombok.Data; 4 5@Data 6public class User { 7 8 private int id; 9 private String loginId; 10 private String password; 11 12}

TestApplication

Java

1package com.example.demo; 2 3import org.springframework.boot.CommandLineRunner; 4import org.springframework.boot.SpringApplication; 5import org.springframework.boot.autoconfigure.SpringBootApplication; 6import org.springframework.transaction.annotation.Transactional; 7 8import com.example.demo.mybatistest.TestMapper; 9import com.example.demo.mybatistest.User; 10 11@SpringBootApplication 12public class TestApplication implements CommandLineRunner { 13 14 public static void main(String[] args) { 15 SpringApplication.run(TestApplication.class, args); 16 } 17 18 private final TestMapper testMapper; 19 20 public TestApplication(TestMapper testMapper) { 21 this.testMapper = testMapper; 22 } 23 24 @Transactional 25 @Override 26 public void run(String... args) throws Exception { 27 User newUser = new User(); 28 newUser.setLoginId("nou391dd"); 29 newUser.setPassword("B93kekns93"); 30 testMapper.insert(newUser); //新しいUserをインサート 31 32 User loadedUser = testMapper.select(newUser.getId()); 33 System.out.println(loadedUser.getId()); 34 System.out.println(loadedUser.getLoginId()); 35 System.out.println(loadedUser.getPassword()); 36 } 37}

schema.sql

SQL

1create table user ( 2 id int(5) auto_increment not null, 3 login_id varchar(20) not null, 4 password varchar(20) not null, 5 primary key(id) 6);

data.sql

sql

1insert into user (login_id, password) values ('islq5459', 'I82Khaec7');

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 http://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>2.1.6.RELEASE</version> 9 <relativePath/> <!-- lookup parent from repository --> 10 </parent> 11 <groupId>com.example</groupId> 12 <artifactId>test</artifactId> 13 <version>0.0.1-SNAPSHOT</version> 14 <name>test</name> 15 <description>Demo project for Spring Boot</description> 16 17 <properties> 18 <java.version>12</java.version> 19 </properties> 20 21 <dependencies> 22 23 <dependency> 24 <groupId>org.springframework.boot</groupId> 25 <artifactId>spring-boot-starter-web</artifactId> 26 </dependency> 27 <dependency> 28 <groupId>org.mybatis.spring.boot</groupId> 29 <artifactId>mybatis-spring-boot-starter</artifactId> 30 <version>2.0.1</version> 31 </dependency> 32 33 <dependency> 34 <groupId>org.springframework.boot</groupId> 35 <artifactId>spring-boot-starter-test</artifactId> 36 <scope>test</scope> 37 </dependency> 38 <dependency> 39 <groupId>org.projectlombok</groupId> 40 <artifactId>lombok</artifactId> 41 </dependency> 42 <dependency> 43 <groupId>com.h2database</groupId> 44 <artifactId>h2</artifactId> 45 <scope>runtime</scope> 46 </dependency> 47 </dependencies> 48 49 <build> 50 <plugins> 51 <plugin> 52 <groupId>org.springframework.boot</groupId> 53 <artifactId>spring-boot-maven-plugin</artifactId> 54 </plugin> 55 </plugins> 56 </build> 57 58</project> 59

※application.propertyは何も設定していません。

補足

上記ソースの実行結果は、TestApplication.javaの標準出力により
2
null
B93kekns93
になります。
終わり

長くなってしまいましたが、よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

想像ですが、データはDBに正しく登録されていて、
取得&Userクラスへの設定で失敗しているということは、ないでしょうか?

というのも、カラム名とlombokで作られたsetterの名称がマッピングできないんじゃないかなあと想像してます。

アンダーバーの有無って、どう処理されます?

投稿2019/07/02 15:16

momon-ga

総合スコア4820

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

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

A-pZ

2019/07/02 16:06

application.yml に mybatis: configuration: map-underscore-to-camel-case: true を設定すれば解決するようですね。(デフォルトはfalse)
tk_19287

2019/07/03 01:24

解答ありがとうございます。 こちら設定してみたところ無事データ登録できました。 application.ymlについては知らないことが多いのでいい勉強になりました。 ありがとうございます。
A-pZ

2019/07/03 06:57

補足すると、application.yml(ないしはapplication.properties)でMyBatisの設定をしていますので、本来はMyBatisの設定なんです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問