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

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

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

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

Eclipse

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

MyBatis

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

Q&A

解決済

2回答

4598閲覧

SqlSessionで複数Insertをしたいです

tokyo2020

総合スコア28

Java

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

Eclipse

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

MyBatis

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

0グッド

0クリップ

投稿2019/10/10 00:54

解決したいこと
・SqlSessionで複数Insertをしたい

java

1public static void main(String[] args) throws Exception { 2 try (InputStream in = MyBatis_Select.class.getResourceAsStream("/mybatis-config.xml")) { 3 SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in); 4 try (SqlSession session = factory.openSession()) { 5 session.insert("sample.mybatis.insertTest2","Test_NO", "Test_Name", "Test_Name_Read", "Test_Code"); 6 session.commit(); 7 session.close(); 8 } 9 } 10 }

上記のようにsession.insertの引数に複数値を入力すると、eclipse上で
「型 SqlSession のメソッド insert(String, Object) は引数 (String, String, String, String, String) に適用できません」
とエラーが表示されます。

session.insert("sample.mybatis.insertTest2","Test_NO");
と、引数を一つにするとエラーが出ずDBにInsertしてくれました。

どのようにすれば複数の値をInsertできるでしょうか。
それと上記のエラーの意味も解説してくださるとありがたいです。

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<mapper namespace="sample.mybatis"> 6 <insert id="insertTest2"> 7 insert into test(EmployeeNo, FullName, FullName_Read, CompanyCode) 8 values(#{EmployeeNo}, #{FullName}, #{FullName_Read}, #{CompanyCode}); 9 </insert> 10</mapper>

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

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

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

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

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

guest

回答2

0

SqlSessionTemplate.insert()メソッドは、insert("sqlのid", 変数を格納するオブジェクト) が正しいです。

さてSQLの定義を見てみると

xml

1values(#{EmployeeNo}, #{FullName}, #{FullName_Read}, #{CompanyCode})

と書かれていますから、安易なのはjava.util.HashMapを用意して、キーと値を設定すれば良いです。

ちなみに、MyBatisは変数に格納したオブジェクトのフィールド名を自動的に解決する機能があるので、HashMapでなくとも任意のJavaクラスのフィールドも利用できます。その時、Javaの慣例的に、変数の先頭を大文字にしません。

書くならば、次のようにします。

java

1sqlSessionTemplate.insert("sql-id", sampleValueObject);

java

1class SampleValueObject { 2 private Long employeeNo; 3 private String fullName; 4 private String fuuNameRead; 5 private Long companyCode; 6 // get・setメソッドは省略 7}

xml

1values(#{employeeNo}, #{fullName}, #{fullNameRead}, #{companyCode})

その他文法やその他詳細な記述方法については、公式サイトを参照するのが一番簡単にして、確実な方法でしょう。
https://mybatis.org/mybatis-3/ja/dynamic-sql.html

投稿2019/10/10 08:02

A-pZ

総合スコア12011

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

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

0

ベストアンサー

「型 SqlSession のメソッド insert(String, Object) は引数 (String, String, String, String, String) に適用できません」
というエラーメッセージは、

・型 SqlSession のinsertメソッドは、(string型 と Object型)二つの引数を持ちます。

・” session.insert("sample.mybatis.insertTest2","Test_NO", "Test_Name", "Test_Name_Read", "Test_Code");” の箇所で、insertメソッドの引数が5つのString型 (String, String, String, String, String) になっていますが、この引数を(string型 と Object型)二つの引数に適応することは出来ないです。

という事です。(ぶっちゃけ、insertメソッドの使い方が間違っているという指摘ですね)

複数のInsertをしたいのであれば、insertメソッドを複数回実行してください。

投稿2019/10/10 01:16

coco_bauer

総合スコア6915

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

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

tokyo2020

2019/10/10 01:56

回答ありがとうございます。 session.insert("sample.mybatis.insertTes2", "Test_NO"); session.insert("sample.mybatis.insertTes2","Test_Name"); ~ session.commit(); session.close(); とinsertメソッドを複数回に分けて書いたのですが、Insertできませんでした。 複数回というのは上記のような書き方で合っているでしょうか?
coco_bauer

2019/10/10 02:54

insertは、データベースにデータを追加するものです。 データベースに格納されている各データには、他のデータと区別できるように特有の名前(主キー)が付けられます。 日本国民に割り当てられた特有の番号であるマイナンバーのようなものが、データベースに有ると考えて戴くと判りやすいかもしれません。 insert関数の第1引数(文字列)には、主キーを指定します。 主キーは他のデータのキーと重複してはいけませんから、既にデータベースで使われている主キーを第1引数にするとinsertは失敗します。 初めてのinsert session.insert("sample.mybatis.insertTes2", "Test_NO"); は成功するでしょうが、 session.insert("sample.mybatis.insertTes2","Test_Name");以降の、主キーを"sample.mybatis.insertTes2"にしたinsertは全て失敗するはずで、その旨のエラーメッセージが表示されたのではないかと思います。 複数のinsertをするには、それぞれ別の主キーを使わなければなりません。同じ主キーを使ってinsertしているから、insertできないのです。 session.insert("sample.mybatis.insertTes2", "Test_NO"); session.insert("sample.mybatis.insertTes3“,"Test_Name"); であれば、主キーが異なるので成功するはずです。 (一度 insertすると、そのデータはデータベースに残りますから、同じ引数のinsertを再実行するとinsertは失敗します)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問