MyBatis 动态参数时需要注意,用$而不是#

1、字符串替换
默认情况下,使用#{}格式的语法会导致MyBatis创建预处理语句属性并以它为背景设置安全的值(比如?)。这样做很安全,很迅速也是首选做法,有时你只是想直接在SQL语句中插入一个不改变的字符串。比如,像ORDER BY,可以这样来使用:
ORDER BY ${columnName}
这里MyBatis不会修改或转义字符串。
重要:接受从用户输出的内容并提供给语句中不变的字符串,这样做是不安全的。这会导致潜在的SQL注入攻击,因此你不应该允许用户输入这些字段,或者通常自行转义并检查。


2、特殊符号处理

在Mybatis的配置文件中经常会用到<、>等符号,在XML的配置文件中会存在问题。可以通过加入<![CDATA[ ....]]>让在标签中的特殊符号不被处理。如:

<select id="selectNextArticle" resultType="Article">
        SELECT 
            <include refid="cmsArticleColumns"/>
        FROM cms_article a
        <include refid="cmsArticleJoins"/>
        <![CDATA[
        WHERE a.article_id > #{articleId} ORDER BY id DESC LIMIT 1
        ]]>
    </select>

原文地址:https://www.cnblogs.com/xiejava/p/15171463.html