• Mybatis中#和$的区别,你知道吗?


    在使用mybatis框架开发项目编写SQL语句的时候,经常需要用到变量替换值,那么用来替换变量值的操作经常用到$和#这两个符号,同样在一些java面试中也经常被问到它们的区别。那么它们在使用上面有什么区别呢?下面根据使用情况分析总结,两者的区别。

    1、#和$两者含义不同

    #会把传入的数据都当成一个字符串来处理,会在传入的数据上面加一个双引号来处理。

    而$则是把传入的数据直接显示在sql语句中,不会添加双引号。

    比如:

    其中如果传入的username类型为字符型,比如输入zhangsan,那么username=#{username}#表示的就是username=”zhangsan”,如果传入的username类型为数值类型,比如输入11,那么username=#{username}#表示的就是username=”11”。

    其中如果传入的username类型为整型类型,那么在执行sql语句时就不会出错,但是如果传入的username类型为字符串型,比如输入zhangsan,那么username=${username}就会变成username=zhangsan,执行会报错,所以sql语句必须写成下面这样。

    2、两者的实现方式不同

    (1)$作用相等于是字符串拼接

    相当于使用StringBuffer的append方法将${username}$追加在

    select username,pass from t_login where username=后面,拼接在一起。

    (2)#作用相当于变量值替换

    相当于使用PreparedStement接口来对#{username}#来进行赋值操作。

    3、#和$使用场景不同

    (1)在sql语句中,如果要接收传递过来的变量的值的话,必须使用#。因为使用#是通过PreparedStement接口来操作,可以防止sql注入,并且在多次执行sql语句时可以提高效率。

    (2)$只是简单的字符串拼接而已,所以要特别小心sql注入问题。对于sql语句中非变量部分,那就可以使用$,比如$方式一般用于传入数据库对象(如传入表名)。

    例如:

    select * from ${tableName}$ 对于不同的表执行统一的查询操作时,就可以使用$来完成。

    (3)如果在sql语句中能同时使用#和$的时候,最好使用#。

  • 相关阅读:
    听闻 kubernetes,快速了解一番
    处理器 趣事 CPU/GPU/TPU/DPU/BPU
    记录
    硬盘
    图 总结 AI
    C# 加密、解密PDF文档(基于Spire.Cloud.SDK for .NET)
    Spire.Cloud 私有化部署教程(二)- Ubuntu 18.04 系统
    Spire.Cloud 私有化部署教程(一)
    C# 将PDF转为Word、Html、XPS、SVG、PCL、PS——基于Spire.Cloud.SDK for .NET
    C# 设置、删除、读取Word文档背景——基于Spire.Cloud.Word
  • 原文地址:https://www.cnblogs.com/richard713/p/16195933.html
Copyright © 2020-2023  润新知