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 中。

  • 相关阅读:
    jar 反编译工具
    SpringBoot 中注解方式的拦截过滤
    jetty 启动项目在pom.xml 的配置
    java Exception 处理汇总
    mysql-覆盖索引
    程序员为何如此累
    启动centos 不带桌面
    Linux 和 Vim 常用命令整理
    How to Use tomcat on Linux
    Mac Book 问题汇集
  • 原文地址:https://www.cnblogs.com/lick468/p/10659528.html
Copyright © 2011-2022 走看看