${} 和 #{} 的区别
时间: 2023-11-01 07:56:41 浏览: 61
${}和#{}都是用来引用变量的语法,在不同的语境下有不同的作用。
${}用于引用变量的值,在shell脚本中,可以使用${}来获取变量的值。例如,${pids[@]}表示获取数组pids的所有元素值。在SQL语句中,${id}表示获取变量id的值。
#{}用于引用变量的名称,在一些编程语言和模板引擎中,可以使用#{}来表示变量的名称。例如,在模板引擎中,#{id}表示获取变量id的名称。
综上所述,${}用于引用变量的值,而#{}用于引用变量的名称。
相关问题
mysql$和#的区别
在MySQL中,$和#有不同的作用和含义。
1. $符号表示变量的引用。在MySQL中,$后面跟着变量名,表示使用该变量的值。例如,如果有一个变量$var,可以使用$var来引用该变量的值。
2. #符号表示注释。在MySQL中,#后面的内容将被视为注释,不会被执行或解释为SQL语句的一部分。可以使用#符号来添加注释,提供代码的可读性和维护性。
mybatis中$和#的区别
在MyBatis中,`$`和`#`是两个特殊的字符,它们在动态SQL生成中有重要的作用:
1. `$`: 这是MyBatis的传统方式(即JDBC预编译语句的遗留支持),在动态SQL表达式中用于引用参数的值。当你在mapper XML文件中直接写 `${parameterName}`,它会被替换为传入的参数值。例如:
```xml
<select id="selectUser" parameterType="map" resultType="User">
SELECT * FROM user WHERE name = #{name}
</select>
```
2. `#`: 这种形式是MyBatis 3.3及以上版本推荐使用的,特别是在Spring Boot集成时,它可以更好地避免SQL注入攻击,因为MyBatis会将`#{}`视为一个表达式,并通过EL(Expression Language)引擎去解析和安全地传递参数值。这种写法更安全且易于维护。同样地:
```xml
<select id="selectUser" parameterType="User" resultType="User">
SELECT * FROM user WHERE name = #{name}
</select>
```
在上述XML中,`#name`会被Spring EL引擎解析成对应的请求参数值。
总结来说,`$`在老版本中使用较多,而`#`不仅提供了更好的安全特性,还兼容了更多现代的依赖和框架。使用`#`时,参数的类型信息会保存在Mapper的参数映射中,有助于MyBatis性能优化。
阅读全文