gpt4 book ai didi

mybatis - 什么时候使用$ vs #?

转载 作者:行者123 更新时间:2023-12-02 05:51:10 26 4
gpt4 key购买 nike

我对使用 $ 与 # 感到困惑。我没有找到任何这方面的指南。我用它们作为
name = #{name}, name like '%${word}%', 按名称排序 ${orderAs},其中名称 = #{word}
有时,这些工作正常,但有时,不包含参数或给我错误,如

org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'name'.......

那么,我想知道何时使用 $#

最佳答案

在您的 sql 语句中使用 #{} 遵循 myBatis 指南。

如果您查看 Mapper XML Files 部分中的任何 MyBatis 引用资料它明确表示:

Notice the parameter notation:

#{id}

否则${}用于

1- 配置 properties

例如:

<properties resource="org/mybatis/example/config.properties">
<property name="username" value="dev_user"/>
<property name="password" value="F2Fa3!33TYyg"/>
</properties>

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

<dataSource type="POOLED">
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>

2- 字符串替换 ${} ( Parameters section ):

By default, using the #{} syntax will cause MyBatis to generate PreparedStatement properties and set the values safely against the PreparedStatement parameters (e.g. ?). While this is safer, faster and almost always preferred, sometimes you just want to directly inject a string unmodified into the SQL Statement. For example, for ORDER BY, you might use something like this:

ORDER BY ${columnName}

Here MyBatis won't modify or escape the string.

NOTE It's not safe to accept input from a user and supply it to a statement unmodified in this way. This leads to potential SQL Injection attacks and therefore you should either disallow user input in these fields, or always perform your own escapes and checks.

因此,在 name like '%${word}%' 或 order by name ${orderAs}` 中,您需要使用字符串替换而不是准备好的语句。

关于mybatis - 什么时候使用$ vs #?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39954300/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com