美文网首页
mybatis中$和#的区别

mybatis中$和#的区别

作者: 就叫basi | 来源:发表于2020-04-14 15:36 被阅读0次

    --- $符 仅仅为一个纯碎的string替换,在动态 SQL 解析阶段将会进行变量替换。会发生sql注入的问题
    --- #符 动态SQL解析为一个JDBC预编译语句(prepared statement)的参数标记符,sql语句中的参数位会被预编译为占位符 ‘?’ 。变量的替换是在 DBMS 中,不会发生sql注入的问题

    特殊点 :

    参数经过拼接,例 :

    拼接.png

    --- #符 :mybatis会将被拼接的orgs拦截,导致参数取不到;
    --- $符 :则可以取到参数值

    预编译的作用:

    1.防止SQL注入 :

    使用预编译,而其后注入的参数将不会再进行SQL编译。也就是说其后注入进来的参数系统将不会认为它会是一条SQL语句,而默认其是一个参数,参数中的or或者and 等就不是SQL语法 保留字了。

    2.预编译阶段可以优化 sql 的执行 :

    一次编译、多次运行,省去了解析优化等过程。

    vans.png

    相关文章

      网友评论

          本文标题:mybatis中$和#的区别

          本文链接:https://www.haomeiwen.com/subject/roqtvhtx.html