#{}和${}的区别

1.#{}和${}都可以用来动态获取参数

2.#{}相当于一个占位符,用于替换变量,sql语句会进行预编译(PreparedStatement ),会编译成一个?问号占位符,可以防止Sql注入,更安全;

 select * from table where id = #{id};

等价于

 PrepareStement  prepareStement =stmt.createPrepareStement("select * from table where id = ?")
 prepareStement.setString(1,'abc');

3.${}在sql语句中,只是拼接参数,不会有其他特殊处理,就普通编译(Statement);

用于变量替换

select * from table where id = #{id}

等效于

   select * from table where id = 4;

4.什么时候用#,什么时候用$

#{}用在传变量值,特别进行,增删改操作时候时候,会预编译,#{}会解析成占位符?,可以预防sql注入
比如:
select age from user where name = #{name}

解析后:

select age from user where name = ?

${}在执行Sql语句,只对字符串进行了拼接,传的参数是真实的数据
比如传值为“汤圆”

select age from user where name = ${name}
解析后:
	select age from user where name = "汤圆"

应用场景

# 能用#{}的尽量用#{},尤其是作为增删改的条件的,毕竟进行预编译,防止Sql注入,解析时候带单引号解析
$ 简单的字符串拼接,若遇到动态参数作为数据表的表名,就只能用${},这个地方用#{}会报语法错误,因为#{}是带引号解析的,在sql语法里面是没有引号的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值