在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 - 通过重新定义严重违反标准 || 意思是或。
所以,我可以做
SELECT * FROM Person WHERE name LIKE CONCAT(#{beginningOfName}, '%')
在这种情况下,仅限于 MySQL,或者我可以这样做
SELECT * FROM Person WHERE name LIKE '{beginningOfName}%'
并且必须自己清理输入。
有没有更优雅的解决方案?