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

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

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

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

MyBatis

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

Spring Boot

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

Q&A

0回答

552閲覧

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

katahik

総合スコア79

Java

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

MyBatis

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

Spring Boot

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

0グッド

1クリップ

投稿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

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問