Mybatis中关于#{}和${}的使用

关于${}和#{}的不一样点,这里就不说了。总结下关于它们两个的使用场景和注意点。

  1. MyBatis排序时使用order by动态参数时须要注意用$而不是#java

  2. 字符串替换,默认状况下,使用#{}格式的语法会致使MyBatis建立预处理语句属性并以它为背景设置安全的值(好比?)这样作很安全,很迅速也是首选作法,有时你只是想直接在SQL语句中插入一个不改变的字符串。好比,像ORDER BY,你能够这样来使用:ORDER BY ${columnName},这里MyBatis不会修改或转义字符串。sql

  3. 接受从用户输出的内容并提供给语句中不变的字符串这样作是不安全的,这会致使潜在的SQL注入攻击,所以你不该该容许用户输入这些字段或者一般自行转义并检查。安全

  4. 实际开发中会用的$有分页,排序,like模糊查询等。code

  5. 实际开发中,若动态查询表名,列名,拼接的sql则必须用$,不然会解析异常。如:排序

    <!-- 查询档案检索字段 -->
     <select id="getEspData"  parameterType="java.util.Map"  resultType="java.util.Map">
     select 
     ${fields}  
     from ${tableName} 
     where ID = #{id}
     </select>
相关文章
相关标签/搜索