RikuMoto
@RikuMoto (Riku Moto)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Spring Daoのメソッド引数NULLの場合

解決したいこと

Daoのメソッドで引数がNULLの場合、SQLの挙動が理想とは違うので
知っていらっしゃる方教えてください。

発生している問題・エラー

 @Select
    List<Company> select(String id, String name, String kana);

上記、id = null name = null kana = test
こちらの引数でSQLを流します

select.sql
SELECT
  /*%expand*/*
FROM
  company
WHERE
  /*%if id != null */
    id = /* id */'1'
    AND
  /*%end */
  /*%if name != null */
    name LIKE /* @infix(name) */'%name%'
  /*%end */
  /*%if kana != null */
    AND
    kana LIKE /* @infix(kana) */'%kana%'
  /*%end */

こちらをSQLで流すと

出力ログ.log
select
    *
from
    company
where
    id = ''
and name like ''
and kana like '%test%

いやいやいや
NULL判定して除外しているのにidとnameが空の状態で入ってるの、、、

理想

出力ログ.log
select
    *
from
    company
where
kana like '%test%

select.sqlを修正して理想の出力ログにしたいです。
存じている方お願い致します。

0

1Answer

Doma2 or Mirage SQL使っているということであっていますか?
Doma2の公式のドキュメント見る限り以下の形式が正しいと思います。

SELECT
  /*%expand*/*
FROM
  company
WHERE
  /*%if id != null */
    id = /* id */'1'
  /*%end */
    AND
  /*%if name != null */
    name LIKE /* @infix(name) */'%name%'
  /*%end */
    AND
  /*%if kana != null */
    kana LIKE /* @infix(kana) */'%kana%'
  /*%end */

前述のライブラリを使っている認識がないのであれば、単純にSQL内のif文が使える状況にないことが考えられます。

1Like

Comments

  1. @RikuMoto

    Questioner

    こちらの記述をしても出力ログは変わりませんでした、、、
  2. @RikuMoto

    Questioner

    Doma-genを使用しています。
  3. @RikuMoto

    Questioner

    @isNotEmptyこちらの書き方で理想にできました。

Your answer might help someone💌