Mapper.xml中的#{}和${}

本文介绍了在Mapper.xml中#{}和${}的使用区别。#{}会根据驼峰命名规则找get方法注入参数,预编译时处理,提高性能并防止SQL注入。${}则在预编译前被替换,可能引发SQL注入问题,适合于动态表名或分页参数等特殊场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#{}:

通过大括号里面的参数,根据驼峰命名规则寻找相应的get方法,将参数注入
编译前

select * from user where name = #{name};
  • 编译后
select * from user where name = ?;

${}:

  • 编译前
select * from user where name = ${name};
  • 编译后
select * from user where name = "Jack";

总结

用法
能使用 #{ } 的地方就用 #{ }
首先这是为了性能考虑的,相同的预编译 sql 可以重复利用。
而${ }在预编译之前已经被变量替换了,这会存在 sql 注入问题。
若其中的值中包含类似–这样的符号,则后面的sql会被当做注解,使用#{}可以避免这一类问题。

那几种情况使用${}

  • 变量为表名时,表名是字符串,使用 sql 占位符替换字符串时会带上单引号 ‘’,这会导致 sql 语法错误
  • LIMIT后的分页参数
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值