MyBatisでは、次のように、SQLにパラメーターを挿入する場所をマークします。
SELECT * FROM Person WHERE id = #{id}
この構文は、特にSQLインジェクション攻撃を回避するために、適切なエスケープなどをアクティブにします。入力を信頼していて、エスケープをスキップしたい場合は、パラメーターを逐語的に挿入できます。
SELECT * FROM {tableName} WHERE id =#{id}
ここで、安全でない入力に対してLIKE検索を実行したいので、実行したいのは次のとおりです。
SELECT * FROM Person WHERE name LIKE #{beginningOfName} || '%'
ただし、残念ながら、重要なDBサーバーは連結の構文をサポートしていません||
。
MSSQL-「||」の代わりに「+」演算子を使用して標準を破ります。
..。
MySQL-再定義することで標準をひどく破る|| ORを意味します。
だから、私はどちらかを行うことができます
SELECT * FROM Person WHERE name LIKE CONCAT(#{beginningOfName}、'%')
この場合はMySQLに限定されます。
SELECT * FROM Person WHERE name LIKE '{beginningOfName}%'
入力を自分でサニタイズする必要があります。
よりエレガントな解決策はありますか?