zoukankan      html  css  js  c++  java
  • Mybatis 中 #{}和${} 的区别

    一般可以使用#不要使用$.

    使用#可以很大程度上防止SQL注入,提高系统安全。$则不可以。

    排序使用order by时,使用$,order by ${columnName}.

    #{}  占位符, 预编译处理。
    ${} 字符串替换,使用花括号内的字符串替换
    
      #{ }:解析为一个 JDBC 预编译语句(prepared statement)的参数标记符。
    

    例如,Mapper.xml中如下的 sql 语句:
    select * from user where name = #{name};
    动态解析为:
    select * from user where name = ?;
    一个 #{ } 被解析为一个参数占位符 ? 。
    ${ } 仅仅为一个纯碎的 string 替换,在动态 SQL 解析阶段将会进行变量替换。
    例如,Mapper.xml中如下的 sql:
    select * from user where name = ${name};
    当我们传递的参数为 "Jack" 时,上述 sql 的解析为:
    select * from user where name = "Jack";
    预编译之前的 SQL 语句已经不包含变量了,完全已经是常量数据了。
    综上所得, ${ } 变量的替换阶段是在动态 SQL 解析阶段,而 #{ }变量的替换是在 DBMS 中。

  • 相关阅读:
    django email用法
    django ImageField用法
    django集成微博内容
    python读写zip文件
    读写文件
    404渲染
    bzoj1297 / P4159 [SCOI2009]迷路
    bzoj1009 / P3193 [HNOI2008]GT考试
    poj2115 C Looooops(exgcd)
    bzoj1407 / P2421 [NOI2002]荒岛野人(exgcd)
  • 原文地址:https://www.cnblogs.com/lick468/p/10659528.html
Copyright © 2011-2022 走看看