• Mybatis映射文件Mapper.xml中#和$的区别


    1、"#"

     简单来说"#"在编译时使用"?"占位符标记,可以有效防止参数注入,相当于我们使用JDBC操作时的PreparedStatement。

    2、"$" 

    直接把参数拼接到SQL中执行相当于JDBC操作时的Statement

    3、参数作为非SQL关键字传递

    <insert id="addUser" parameterType="User">
            insert into users values(default, "${username}", "${password}", "${photo}");
    </insert>

    或者把"$"改成"#"

    <insert id="addUser" parameterType="User">
            insert into users values(default, #{username}, #{password}, #{photo});
     </insert>

    4、参数作为关键字传递,比如查询条件全是由参数拼接的,只是用一条SQL,有时要按name列查,有时要按age列查

    <select id="selectUser" parameterType="User" resultType="User">

          select * from users where ${columnName}  ${condition}  #{columnValue}

    </select>

    SQL1:select * from users where username = "test";

    SQL2:select * from users where userage like "%2";

    因为列名和关系条件是关键字,是用"$",列值是非关键字,使用"#"。

    三、总结

    1、关键字作为参数,使用"$",两边不加""。

    2、非关键字作为参数,使用"#"防注入。

    其他情况优先使用"#"

  • 相关阅读:
    多播委托和匿名方法再加上Lambda表达式
    委托
    从警察抓小偷看委托
    StringBuilder
    C#修饰符详解
    数据结构与算法之队列
    数据结构与算法之栈
    win10重复安装
    网络编程基础
    PrintPreviewControl
  • 原文地址:https://www.cnblogs.com/u013533289/p/11622937.html
Copyright © 2020-2023  润新知