一、#{}和${}是用于不同用途的两种占位符。
-
${}
是Spring框架中使用的占位符,也被称为属性占位符。它用于在配置文件中引用外部属性或配置项的值。例如,可以在Spring配置文件中使用${database.url}
来引用数据库连接的URL。这个占位符会在运行时被解析,并替换为实际的属性值。${}
占位符通常在Spring的配置文件(如application.properties)中使用。 -
#{}
是MyBatis框架中使用的占位符,也被称为参数占位符。它用于在SQL语句中插入参数值。例如,可以在MyBatis的Mapper XML文件中使用#{name}
来表示一个参数占位符,它将会在SQL执行时被替换为实际的参数值。#{}占位符通常在MyBatis的Mapper XML文件中使用。
需要注意的是,尽管它们都是占位符,但是它们在用法和作用域上有所不同。${}
是用于引用外部配置属性值的占位符,而#{}
是用于插入参数值的占位符。
二、区别:
在Java中,#{}
和${}
是用于不同目的的占位符,并且它们的默认类型是字符串。
-
${}
是Property Placeholder占位符,用于在Java应用程序中引用外部属性或配置项的值。它通常与框架(如Spring)一起使用,从配置文件中读取属性值,并将其注入到Java类或组件中。${}
占位符中的值被视为字符串,因此在配置文件中定义的值将会作为字符串类型被替换。 -
#{}
是MyBatis中使用的参数占位符,用于在SQL语句中插入参数值。它用于构建动态SQL语句和传递参数给SQL查询。#{}
占位符中的值也被视为字符串。但是,MyBatis在内部会根据传入的参数类型进行类型转换,并将该值作为对应的Java类型(如整数、字符串等)传递给SQL查询。
需要注意的是,默认情况下,占位符的值被视为字符串。但是,这些占位符在实际使用时可以根据需要进行类型转换。在Spring和MyBatis等框架中,可以通过设置相关配置来指定占位符的默认类型或执行自定义类型转换逻辑。
三、下面是#{}
和${}
在Java应用中的具体应用举例:
- 在Spring中使用
${}
:
假设你有一个Spring配置文件(application.properties
),其中包含以下属性:
database.url=jdbc:mysql://localhost:3306/mydb
在你的Java代码中,你可以使用${}
来引用这个属性:
@Value("${database.url}")
private String databaseUrl;
在这里,${database.url}
会在运行时被实际值(jdbc:mysql://localhost:3306/mydb
)替换,并使用@Value
注解将该值注入到databaseUrl
变量中。
- 在MyBatis中使用
#{}
:
假设你有一个MyBatis的Mapper XML文件,其中定义了一个带参数的SQL查询:
<select id="getUserById" resultType="User">
SELECT * FROM users WHERE id = #{userId}
</select>
在你的Java代码中,你可以使用#{}
来传递实际的参数值:
@Select("getUserById")
public User getUserById(@Param("userId") Long id);
在这里,#{userId}
是一个参数占位符,它将会被传递给getUserById
方法的实际值替换。
总结一下,${}
在Spring中用于引用配置属性(默认字符串),而#{}
在MyBatis中用于定义带参数的SQL查询(支持类型的匹配)。