mybatisはどうしてくれぐれもwhere 1=1を使わないでください。
1.ソリューション
以下はmybatisの検索文ですが、今回は「state=「ACTIVE」を動的条件に設定したら、何が起こるかを確認してみます。
MyBatisは簡単でほとんどのシーンに適合する解決方法があります。他のシーンでは、必要に応じてカスタマイズすることができます。これは簡単な変更が必要です。
2.なぜ1=1が使えないですか?
1.表のデータインデックスが失効する恐れがあります。
2.ゴミの条件は、追加する必要がありません。
3.公式文書の住所
mybatis公式サイトのアドレス
ここで、mybatisはなぜwhere 1=1の文章を使わないでくださいかについて紹介します。mybatis where 1=1の内容は以前の文章を検索してください。または次の関連記事を引き続きご覧ください。これからもよろしくお願いします。
以下はmybatisの検索文ですが、今回は「state=「ACTIVE」を動的条件に設定したら、何が起こるかを確認してみます。
<select id="findActiveBlogLike"
resultType="Blog">
SELECT * FROM BLOG
WHERE
<if test="state != null">
state = #{state}
</if>
<if test="title != null">
AND title like #{title}
</if>
<if test="author != null and author.name != null">
AND author_name like #{author.name}
</if>
</select>
もし一致する条件がなかったらどうなりますか?最終的にこのSQLはこうなります。
SELECT * FROM BLOG
WHERE
これはクエリに失敗します。もしマッチしたのが第二の条件だったらどうなりますか?このSQLはこうなります。
SELECT * FROM BLOG
WHERE
AND title like ‘someTitle'
このクエリも失敗します。この問題は簡単に条件要素で解決できない。この問題はこのように解決しにくいので、解決した人はこのような問題にぶつかりたくないです。MyBatisは簡単でほとんどのシーンに適合する解決方法があります。他のシーンでは、必要に応じてカスタマイズすることができます。これは簡単な変更が必要です。
<select id="findActiveBlogLike"
resultType="Blog">
SELECT * FROM BLOG
<where>
<if test="state != null">
state = #{state}
</if>
<if test="title != null">
AND title like #{title}
</if>
<if test="author != null and author.name != null">
AND author_name like #{author.name}
</if>
</where>
</select>
where要素は、サブ要素が何かを返す場合にのみ、「WHERE」というサブフレーズを挿入します。また、子文の先頭が「AND」または「OR」であれば、where要素もそれらを除去します。2.なぜ1=1が使えないですか?
1.表のデータインデックスが失効する恐れがあります。
2.ゴミの条件は、追加する必要がありません。
3.公式文書の住所
mybatis公式サイトのアドレス
ここで、mybatisはなぜwhere 1=1の文章を使わないでくださいかについて紹介します。mybatis where 1=1の内容は以前の文章を検索してください。または次の関連記事を引き続きご覧ください。これからもよろしくお願いします。