• 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}';
  • 相关阅读:
    vijos 1066 弱弱的战壕 树状数组
    vijos 1057 盖房子 简单DP
    完全背包
    HDU 1203 和 HDU 2191
    dp 01背包,完全背包,多重背包 模板
    UVA11624 Fire!
    我们要学习的算法
    Find a way 两路广搜
    NYOJ 最小步数(简单深搜与广搜)
    HDU Dungeon Master广搜
  • 原文地址:https://www.cnblogs.com/renxiuxing/p/9228360.html
Copyright © 2020-2023  润新知