In MyBatis http://www.mybatis.org/,您可以标记参数应插入到 SQL 中的位置,如下所示:
从人员中选择 *,其中 id =#{id}
此语法会激活正确的转义等,以避免 SQL 注入攻击等。如果您有可信输入并且想要跳过转义,您可以逐字插入参数:
选择*从{表名}哪里 id = #{id}
现在,我想对不安全的输入进行 LIKE 搜索,所以我想做的是:
从姓名类似的人中选择 *#{beginningOfName} || '%'
很遗憾但是,重要的数据库服务器不支持||连接语法 http://troels.arvin.dk/db/rdbms/#functions-concat:
MSSQL - 使用“+”运算符而不是“||”违反了标准。
...
MySQL - 通过重新定义 || 严重违反标准表示“或”。
所以,我可以做
从姓名类似的人中选择 *CONCAT(#{beginningOfName}, '%')
在本例中,仅限于 MySQL,或者我可以这样做
从姓名类似的人中选择 *'{beginningOfName}%'
并且必须自己清理输入。
有更优雅的解决方案吗?
你可以使用bind syntax
Quoting 官方文档 https://mybatis.github.io/mybatis-3/dynamic-sql.html
绑定元素允许您从 OGNL 表达式创建变量
并将其绑定到上下文。例如:
<select id="selectBlogsLike" resultType="Blog">
<bind name="pattern" value="'%' + _parameter.getTitle() + '%'" />
SELECT * FROM BLOG
WHERE title LIKE #{pattern}
</select>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)