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

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

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

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

MyBatis

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

Spring Boot

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

受付中

【SpringBoot】MyBatisでxmlが呼び出せない

katahik
katahik

総合スコア78

Java

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

MyBatis

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

Spring Boot

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

0回答

0グッド

1クリップ

184閲覧

投稿2022/11/19 02:30

編集2022/11/19 05:08

概要

SpringBootでWebアプリを作成しています。
ORMapperはmybatisを使っています。
xmlファイルにSQLを作成しましたが、うまく呼び出せません。

xmlファイルの呼び出しに問題があると思っていますが、解決できませんでした。

お手数おかけしますが、お知恵を貸してください。

実現したいこと

xmlファイルに書いたSQL文を実行したい

ディレクトリ構成

src/main ├── java │   └── com │   └── example │   └── userapi │   ├── UserApiApplication.java │   ├── batch │   │   ├── CsvImportJobInvoker.java │   │   └── CsvImporter.java │   ├── config │   │   ├── MyBatisConfig.java │   │   └── MyBatisMapperScannerConfig.java │   ├── constants │   │   └── ErrorCode.java │   ├── controller │   │   ├── BatchController.java │   │   └── UserController.java │   ├── entity │   │   ├── PurchasingInformation.java │   │   └── User.java │   ├── mapper │   ├── repository │   │   ├── PurchasingInformationMapper.java │   │   └── UserMapper.java │   ├── service │   │   ├── PurchasingInformationService.java │   │   └── UserService.java │   └── utility │   └── Logger.java └── resources ├── application.properties ├── com.example.userapi.repository │   └── PurchasingInformationMapper.xml ├── static └── templates

該当のソースコード

このxmlファイルを呼び出したい
resources/com.example.userapi.repository/PurchasingInformationMapper.xml

Java

1<?xml version="1.0" encoding="UTF-8" ?> 2<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 3 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 4<mapper namespace="com.example.userapi.repository.PurchasingInformationMapper"> 5 <insert id="bulkInsert" parameterType="java.util.List"> 6 INSERT INTO purchasing_information 7 ( 8 sales_date, 9 buyer_id, 10 product_name, 11 comment 12 ) 13 VALUES 14 <foreach collection="entities" item="entity" separator=","> 15 ( 16 #{entity.sales_date}, 17 #{entity.buyer_id}, 18 #{entity.product_name}, 19 #{entity.comment} 20 ) 21 </foreach> 22 </insert> 23</mapper>

xmlファイルの呼び出し元
java/com/example/userapi/repository/PurchasingInformationMapper.java

Java

1package com.example.userapi.repository; 2 3import java.util.List; 4import org.apache.ibatis.annotations.Insert; 5import org.apache.ibatis.annotations.Mapper; 6import org.apache.ibatis.annotations.Param; 7import org.springframework.stereotype.Component; 8 9import com.example.userapi.entity.PurchasingInformation; 10 11@Mapper 12@Component 13public interface PurchasingInformationMapper { 14 int bulkInsert(@Param("entities")List<PurchasingInformation> entities); 15}

参考
java/com/example/userapi/service/PurchasingInformationService.java

Java

1package com.example.userapi.service; 2 3import java.util.ArrayList; 4 5import org.springframework.beans.factory.annotation.Autowired; 6import org.springframework.stereotype.Service; 7 8import com.example.userapi.entity.PurchasingInformation; 9import com.example.userapi.repository.PurchasingInformationMapper; 10 11@Service 12public class PurchasingInformationService { 13 private final PurchasingInformationMapper dao; 14 15 @Autowired 16 public PurchasingInformationService(PurchasingInformationMapper dao) { 17 this.dao = dao; 18 } 19 20 public int bulkInsert(ArrayList<PurchasingInformation> entities) { 21 return dao.bulkInsert(entities); 22 } 23} 24

参考
build.gradle

Java

1plugins { 2 id 'java' 3 id 'org.springframework.boot' version '2.7.5' 4 id 'io.spring.dependency-management' version '1.0.15.RELEASE' 5} 6 7group = 'com.example' 8version = '0.0.1-SNAPSHOT' 9sourceCompatibility = '17' 10 11repositories { 12 mavenCentral() 13} 14 15dependencies { 16 implementation 'org.springframework.boot:spring-boot-starter-web' 17 developmentOnly 'org.springframework.boot:spring-boot-devtools' 18 testImplementation 'org.springframework.boot:spring-boot-starter-test' 19 implementation 'org.xerial:sqlite-jdbc:3.30.1' 20 implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.2.2' 21 implementation 'org.xerial:sqlite-jdbc:3.39.3.0' 22 implementation 'io.reactivex.rxjava3:rxjava:3.1.5' 23 compileOnly 'org.projectlombok:lombok' 24 annotationProcessor 'org.projectlombok:lombok' 25} 26 27tasks.named('test') { 28 useJUnitPlatform() 29}

参考
java/com/example/userapi/config/MyBatisMapperScannerConfig.java

Java

1package com.example.userapi.config; 2 3import org.mybatis.spring.mapper.MapperScannerConfigurer; 4import org.springframework.context.annotation.Bean; 5import org.springframework.context.annotation.Configuration; 6 7@Configuration 8public class MyBatisMapperScannerConfig { 9 @Bean 10 public MapperScannerConfigurer mapperScannerConfigurer() { 11 MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer(); 12 mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory"); 13 14 mapperScannerConfigurer.setBasePackage("com.example.userapi.repository"); 15 16 return mapperScannerConfigurer; 17 } 18}

参考
resources/application.properties

Java

1server.error.include-stacktrace=never 2logging.file.name=logs/application.log 3logging.level.org.springframework.web=INFO 4 5spring.datasource.url=jdbc:sqlite:db/database.sqlite3 6spring.datasource.driver-class-name=org.sqlite.JDBC 7mybatis.configuration.map-underscore-to-camel-case=true 8mybatis.mapper-locations=classpath:/com/example/userapi/repository/*.xml

試したこと

xmlを使わない場合(MapperファイルにSQLを書いた場合)はSQLが実行されるのか→実行される

一旦以下2つのファイルを下記のように変更し、insert文を実行したら、正しくDBに保存された。
java/com/example/userapi/service/PurchasingInformationService.java

Java

1.... 2 public int bulkInsert(ArrayList<PurchasingInformation> entities) { 3 dao.insertUser("11111111"); 4 return 1; 5 } 6...

java/com/example/userapi/repository/PurchasingInformationMapper.java

Java

1... 2public interface PurchasingInformationMapper { 3 @Insert("INSERT INTO purchasing_information(sales_date) values(#{sales_date})") 4 void insertUser(@Param("sales_date") String sales_date); 5... 6}

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

Springframework.boot 2.7.5

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Java

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

MyBatis

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

Spring Boot

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