MyBatisのifタグについてる「test」って何?
こんにちは!
あこちかです!
今日は本業の話です。
私の本業は一応SEで、
現在は SpiringBoot + MyBatis でWebシステムを開発しています。
最近とても気になることがあったので、
調べた結果わかったことをご紹介します。
同じような疑問を抱いた方へのちょっとした疑問解消になればと思います。
最近の一番の疑問はずばり
「MyBatisのifタグについてる「test」って何?」
です。
結論から言うと正確なことはわかりませんでした。
でもまぁ……納得……できるかも……という理由にたどり着いたのでご紹介します。
そもそもMyBatisって何?
ざっくりデータベースを扱う時のフレームワークで、Javaソースでデータを取得したり更新したりする際に使用するもの、になります。
ちなみに読み方は「マイバティス」
私はちゃんと調べるまでずっと「マイベイシス」って呼んでました……
MyBatisの使い方
MyBatisでは動的SQLを作成できます。
「この条件の時はwhere句つけないようにしたい」とか
「この条件の時はこのSQL使いたい」とか
実行する時の条件によってSQL文を変えることができます。
今開発してるWebシステムでも「if」タグ等を使用しています。
例えば<select>タグを使用して下記のようなSQL文を作成したとします。
<select id="readLibrary" resultType="map">
SELECT * FROM LIBRARY
WHERE id = ‘0001’
<if test="name != null">
AND name like #{name}
</if>
</select>
ここで「name」が null の場合、「AND name like #{name}」は採用されないため、下記のようなSQLが構築されます。
SELECT * FROM LIBRARY WHERE id = ‘0001’
と、まぁここまではいいんですが……
MyBatisのifタグについてる「test」って何?
本題です。
ifタグやwhenタグ等に「test」という文言がついてます。
「test」に任意の条件を指定して使用するのですが……
いや、「test」って何なんでしょうか?
「test」って直訳で「試験」ですよね。
今回のプロジェクトで初めてMyBatisを触ったので調べた時に
「testということは本番環境では使用できない設定なのか? なんか使う条件あるのか!?」
と頭を悩ませました。
そういう構文だからと言ってしまえばそれまでなのですが……
なんで「test」にしてるんだろう。
気になる。めちゃくちゃ気になる。
で、色々調べてみたのですが理由が記載されているサイトが見つからず……
これもう開発者に聞くしかないのかなぁと思っていたら、
ChatGPTさんから下記の回答が返ってきました。
「test」には評価という意味合いもあるので使用している
簡潔でわかりやすく、ユーザーに理解してもらいやすいから使用している
なるほど……
調べてみたところ「JSTL」でも test属性が使用されているようです。
「testだから試験! 仮のもの!」
という考えが基本になっていましたが、
「評価」という考え方がスタンダードなのかなぁと思いました。
まとめ
MyBatisのifタグについてる「test」は、
「記載した条件を評価し、その結果に基づいてSQLを構築するため、評価という意味合いがある「test」と命名している」
というのが私として納得できる理由でした。
正確なところはどうなんでしょうか。
どなたかご存じでしたら教えていただきたいです……
調べてわかったことがあったら追記していきます。
最後までお読みいただきありがとうございました!