java中#{} 和 ${} 的区别?

一、#{}和${}是用于不同用途的两种占位符。

  1. ${}是Spring框架中使用的占位符,也被称为属性占位符。它用于在配置文件中引用外部属性或配置项的值。例如,可以在Spring配置文件中使用${database.url}来引用数据库连接的URL。这个占位符会在运行时被解析,并替换为实际的属性值。${}占位符通常在Spring的配置文件(如application.properties)中使用。

  2. #{}是MyBatis框架中使用的占位符,也被称为参数占位符。它用于在SQL语句中插入参数值。例如,可以在MyBatis的Mapper XML文件中使用#{name}来表示一个参数占位符,它将会在SQL执行时被替换为实际的参数值。#{}占位符通常在MyBatis的Mapper XML文件中使用。

需要注意的是,尽管它们都是占位符,但是它们在用法和作用域上有所不同。${}是用于引用外部配置属性值的占位符,而#{}是用于插入参数值的占位符。

二、区别:

在Java中,#{} ${}是用于不同目的的占位符,并且它们的默认类型是字符串。

  1. ${}是Property Placeholder占位符,用于在Java应用程序中引用外部属性或配置项的值。它通常与框架(如Spring)一起使用,从配置文件中读取属性值,并将其注入到Java类或组件中。${}占位符中的值被视为字符串,因此在配置文件中定义的值将会作为字符串类型被替换。

  2. #{}是MyBatis中使用的参数占位符,用于在SQL语句中插入参数值。它用于构建动态SQL语句和传递参数给SQL查询。#{}占位符中的值也被视为字符串。但是,MyBatis在内部会根据传入的参数类型进行类型转换,并将该值作为对应的Java类型(如整数、字符串等)传递给SQL查询。

需要注意的是,默认情况下,占位符的值被视为字符串。但是,这些占位符在实际使用时可以根据需要进行类型转换。在Spring和MyBatis等框架中,可以通过设置相关配置来指定占位符的默认类型或执行自定义类型转换逻辑。

三、下面是#{} ${}在Java应用中的具体应用举例:

  1. 在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变量中。

  1. 在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查询(支持类型的匹配)。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜鸡上道

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值