MyBatis排序时使用order by动态参数时须要注意用$而不是#java
字符串替换,默认状况下,使用#{}格式的语法会致使MyBatis建立预处理语句属性并以它为背景设置安全的值(好比?)这样作很安全,很迅速也是首选作法,有时你只是想直接在SQL语句中插入一个不改变的字符串。好比,像ORDER BY,你能够这样来使用:ORDER BY ${columnName},这里MyBatis不会修改或转义字符串。sql
接受从用户输出的内容并提供给语句中不变的字符串这样作是不安全的,这会致使潜在的SQL注入攻击,所以你不该该容许用户输入这些字段或者一般自行转义并检查。安全
实际开发中会用的$有分页,排序,like模糊查询等。code
实际开发中,若动态查询表名,列名,拼接的sql则必须用$,不然会解析异常。如:排序
<!-- 查询档案检索字段 --> <select id="getEspData" parameterType="java.util.Map" resultType="java.util.Map"> select ${fields} from ${tableName} where ID = #{id} </select>