myBatis
のガイドラインに続いて、#{}
がSQL文で使用されます。あなたが見てみる場合は
セクションでMyBatisのリファレンスのいずれかがMapper XML Filesそれが言う明示的に:
お知らせパラメータ表記:
#{id}
そうでない場合${}
が
のためであります
1-設定properties。例えば
:
<properties resource="org/mybatis/example/config.properties">
<property name="username" value="dev_user"/>
<property name="password" value="F2Fa3!33TYyg"/>
</properties>
は、プロパティを次のように使用することができる。
<dataSource type="POOLED">
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
2-文字列置換${}
(Parameters section):デフォルトで
、使用#{}構文を使用するとMyBatisが生成されます PreparedStatementプロパティPreparedStatementパラメータ(例:)に対して値を安全に設定します。 ?)。これはより安全で速く、 がほとんど常に優先されますが、 文字列をそのままSQL文に直接挿入したい場合もあります。たとえば、ORDER BYのために、 あなたはこのようなもの使用することがあります。ここで$ {} COLUMNNAME
BY
ORDERをMyBatisのは、文字列を変更したり、逃れられないだろう。
注記ユーザーからの入力を受け入れて、この方法で修正されていない ステートメントに供給することは安全ではありません。これにより潜在的なSQL 注射攻撃につながるため、これらのフィールドにユーザー入力 を禁止するか、常に独自のエスケープとチェックを実行する必要があります。
name like '%${word}%' or
$ {orderAs} `と確定しました。準備された文ではなく、文字列の置換を使用する必要があります。
出典
2016-10-10 08:54:34
Pau
'name = $ {name}'、 '%#{word}% 'のような名前です。これらはOKではありません。 *#{}があなたのSQL文で使われています.... *私は理解しませんでした。私はSQL文の中でmybatis expを使っています。そうじゃない? * $ {}はJavaプロパティーのためのものです。*これらはパラメータタイプによってはバリデートされる可能性がありますか? – Cataclysm
あなたが説明したガイドラインに従うためのリンクを私にサポートできますか? – Cataclysm
私は私の答えを編集しました。申し訳ありませんが、明確でない場合は – Pau