zoukankan      html  css  js  c++  java
  • zbb20180827 Mybatis中#{}和${}有什么区别?

    1.Mybatis中#{}和${}有什么区别?

    (1) #{} 和 ${} 在预编译中的处理是不一样的。#{} 在预处理时,会把参数部分用一个占位符 ? 代替,而${}直接已字符串代替

    例如:

    select * from tablename where name=#{name}
    预编译的时候处理成
    select * from tablename where name=?

    select * from tablename where name=${name}

    会在预编译中处理成

    select * from tablename where name=‘zhangsan’

    总结:#{} 的参数替换是发生在 DBMS 中,而 ${} 则发生在动态解析过程中。${}方式会引发SQL注入的问题、同时也会影响SQL语句的预编译,所以从安全性和性能的角度出发,能使用#{}的情况下就不要使用${}

    但是${}在什么情况下使用呢?

    有时候可能需要直接插入一个不做任何修改的字符串到SQL语句中。这时候应该使用${}语法。

    比如,动态SQL中的字段名,如:ORDER BY ${columnName}

    所以:当使用${}参数作为字段名或表名时,用${}。并需指定statementType为“STATEMENT”

  • 相关阅读:
    MySQL Unable to convert MySQL datetime value to System.DateTime 解决方案
    Zend 无限试用
    SQL 触发器
    C# 多线程示例
    JS 实现打印
    apache开启.htaccess
    MySQL 安装包下载教程
    js系列(10)js的运用(二)
    js系列(9)js的运用(一)
    js系列(8)简介
  • 原文地址:https://www.cnblogs.com/super-admin/p/9542457.html
Copyright © 2011-2022 走看看