在MyBatis中,您可以在SQL中标记应插入参数的位置,如下所示:
SELECT*FROM Person WHERE id = #{id}
此语法激活正确的转义等,以避免SQL注入攻击等.如果您有可信输入并希望跳过转义,则可以逐字插入参数:
SELECT*FROM {tableName} WHERE id =#{id}
现在,我想对不安全的输入进行LIKE搜索,所以我想做的是:
SELECT*FROM Person WHERE name LIKE #{beginningOfName} || '%'
但遗憾的是,重要的数据库服务器不支持||串联语法:
MSSQL - 使用'+'运算符而不是'||'来打破标准.
...
MySQL - 通过重新定义||严重打破了标准 表示OR.
所以,我也可以
SELECT*FROM Person WHERE name LIKE CONCAT(#{beginningOfName},'%')
在这种情况下,只限于MySQL,或者我可以做到
SELECT*FROM Person WHERE name LIKE '{beginningOfName}%'
并且必须自己清理输入.
有更优雅的解决方案吗?