首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么时候使用$ vs #?

问什么时候使用$ vs #?
EN

Stack Overflow用户
提问于 2016-10-10 08:34:52
回答 3查看 20.3K关注 0票数 27

我对使用$ vs #感到困惑。我没找到任何向导。我把它们当作

name = #{name},name like '%${word}%',order by name ${orderAs},where name = #{word}

有时,这些都很好,但有时不包括参数,或者给了我错误,比如

org.apache.ibatis.reflection.ReflectionException:没有名为“名称”的属性.

那么,我想知道什么时候使用$或#?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-10-10 08:54:34

按照myBatis准则,#{}将在您的sql语句中使用。

如果您查看一下MyBatis在Mapper XML文件部分中的任何引用,都会看到解释性:

注意参数表示法: #{id}

否则,${}是用于

1-配置属性。

例如:

代码语言:javascript
复制
<properties resource="org/mybatis/example/config.properties">
  <property name="username" value="dev_user"/>
  <property name="password" value="F2Fa3!33TYyg"/>
</properties>

然后,这些属性可以像下面这样使用:

代码语言:javascript
复制
<dataSource type="POOLED">
  <property name="username" value="${username}"/>
  <property name="password" value="${password}"/>
</dataSource>

2-字符串替换${} (参数段):

默认情况下,使用#{}语法将导致MyBatis生成PreparedStatement属性,并根据PreparedStatement参数(例如?)安全地设置值。虽然这更安全、更快而且几乎总是首选的,但有时您只是想直接将未经修改的字符串注入到SQL语句中。例如,对于ORDER,您可以使用如下内容: 由${columnName}订购 在这里,MyBatis不会修改或转义字符串。 注意,接受用户的输入并以这种方式将其提供给未修改的语句是不安全的。这会导致潜在的SQL注入攻击,因此您应该在这些字段中不允许用户输入,或者始终执行自己的转义和检查。

因此,按照名称${orderAs}的name like '%${word}%' or顺序,您需要使用字符串替换,而不是准备好的语句。

票数 37
EN

Stack Overflow用户

发布于 2021-04-26 12:50:57

这个(${} -简单变量)

代码语言:javascript
复制
SELECT * from user where usernum = ${usernum}

翻译成这个

代码语言:javascript
复制
SELECT * from user where usernum = 666

,但这(#{} -等效于JDBC中的PreparedStatement )

代码语言:javascript
复制
SELECT * from user where usernum = #{usernum}

翻译成

代码语言:javascript
复制
SELECT * from user where usernum = ?

,所以最好的用法是

代码语言:javascript
复制
SELECT * from ${tablename} where name = #{name}
票数 11
EN

Stack Overflow用户

发布于 2021-11-12 06:02:20

我也对此感到困惑。然后我做了些调查。我有一个查询,类似于ibatis中的select * from tablename h where h.id=#userid#。然后我不得不将它迁移到mybatis 3中。同样的说法不管用。所以我把它改成了select * from tablename h where h.id=#{userid}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39954300

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档