【MyBatis】IN句にパラメータを設定する方法

当ページのリンクには広告が含まれています。
SQL, Mybatis, OR, O/R

SpringアプリケーションにおいてMybatisを使用する状況を想定した実装例です。

目次

期待値

IN句に複数のパラメータが設定されたSQL文が発行されること

 

前提

■アプリケーション構成
・org.springframework.boot 2.6.4
・spring-boot-starter-web
・mybatis-spring-boot-starter 2.2.2

■テーブル構成
Ticketテーブルに対して支払区分(payment_code)をIN句で指定する状況を想定しています。

実装例

Repositoryで指定する引数の型または指定方法によって、XMLのcollectionに指定する値が異なります。
以下にそれぞれのパターンを記載しました。

@Paramによる指定

Repository

XML
@Paramで指定した名称とcollectionの値を一致させます。

 

Arrayによる指定

Repository

XML
配列の場合、collectionには「array」を指定します。

 

Collection型による指定(ex. List)

ここではListを例に記載します。

Repository

XML

 

オブジェクトによる指定

検索フォームオブジェクトを検索パラメータとして扱う状況で説明します。
(氏名、誕生日はTicketテーブルにはありません。
 検索フォームをパラメータとして渡す例として支払区分以外を持たせるためのダミーです)
 
Form

Repository
検索フォームオブジェクトをパラメータとして渡した場合

XML
collectionには、Repositoryで指定されたFormのフィールドである「paymentCodes」を指定します。
その際、paymentCodesのGetterを用意しておいてください。
本記事では、lombokの@Dataを使うことでGetter/Setterを実装しています。

 

補足

XMLのnullableはcollectionとして渡すフィールドの値がNULLを許容するかの指定です。
falseを指定してNULL値を渡すと、MyBatisSystemExceptionが発生します。

 

まとめ

    IN句に設定する方法は以下の通りです。

  • @Paramで名称を指定する
  • 配列はcollection=arrayと指定する
  • Listはcollection=listと指定する
  • パラメータとして渡したオブジェクトのフィールドを指定したい場合、collection=[対象のフィールド]と指定する

参考情報

MyBatis – 動的SQL – foreach
https://mybatis.org/mybatis-3/ja/dynamic-sql.html

最後までお読み頂き、ありがとうございました!
ご意見・ご要望がありましたら、遠慮なくコメント下さい!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

リーマンショックの影響で26歳の時にIT業界から離れ、紆余曲折を経て34歳でエンジニアに復帰しました。
復帰前は開発未経験でしたが、独学した知識と面接時のコミュニケーション力で見事開発エンジニアとして復帰しました!
今はフリーランスエンジニアとして仕事をしています。

■保有資格
・Java Gold SE 11

コメント

コメントする

CAPTCHA


目次