相关疑难解决方法(0)

(如何)我可以安全地使用MyBatis和DB-agnostic在SQL查询中使用"LIKE"?

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}%'

并且必须自己清理输入.

有更优雅的解决方案吗?

sql mybatis

15
推荐指数
4
解决办法
4万
查看次数

标签 统计

mybatis ×1

sql ×1