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

    Mybatis中#{}与${}的区别

    • 在 mapper 中定义的参数传到 xml 中之后,在查询之前 mybatis 会对其进行动态解析。mybatis 为我们提供了两种支持动态 sql 的语法:#{} 以及 ${}。

    • .{ } 在预处理时,会把参数部分用一个占位符 ? 代替,而 ${} 则只是简单的字符串替换。

    • 例:name的值为张三

        select * from user where name = #{name};
      
        select * from user where name = '${name}';
      
    • 解析结果一样:

        select * from user where name = '张三';
      
    • 预编译中的处理是不一样:

        select * from user where name = ?;  -- #{}预处理
      
        select * from user where name = '张三';  -- ${}预处理
      
    • 因为 ${} 会导致 sql 注入的问题,开发中优先使用#{}。

    • 例:表名称为user;--

        select * from ${tableName} where name = '${name}';
      
    • 则动态解析之后 sql 如下:

        select * from user; -- where name = 张三;  -- 后面的会被注释掉,语句就变成了查询所有
      
    • 但是使用模糊查询时,常用 ${}进行拼接

    • 例:查询名字里带有小明(value)的信息

        SELECT * FROM USER  WHERE username LIKE '%${value}%';
      
    • 解析结果:

        SELECT * FROM USER WHERE username LIKE '%小明%' ;
      
    • 使用${}是字符串的拼接,记得加'${value}'

    • 例:

        SELECT * FROM USER  WHERE username = '${value}';
  • 相关阅读:
    HTTP协议抓包分析
    cmd 中使用 tracert
    Ubuntu 搭建zabbix
    kerberos+ldap
    运行程序显示丢失“MSVCR100D.dll”
    熊猫烧香病毒样本分析
    Masm32sdk安装指南
    16位汇编实现三大基本排序
    逆向工程初步160个crackme-------3
    一个入门级CTF的Reverse
  • 原文地址:https://www.cnblogs.com/renxiuxing/p/9228360.html
Copyright © 2011-2022 走看看