Mybatis中关于#{} 和${} 格式的占位符

● 在Mybatis中,配置SQL语句时,参数可以使用#{}或${}格式的占位符

●例如存在需求:分页查询表中的所有数据。

●需要执行的SQL语句大致是:

select * from ams_admin order by id limit ?, ?

● 则此功能的抽象方法应该是:

List<Admin> listPage(@Param("offset") Integer offset,
@Param("size") Integer size);

● 配置SQL语句:

<select id="listPage" resultMap="BaseResultMap"> select
<include refid="BaseQueryFields" /> from ams_admin
order by id
limit #{offset}, #{size}
</select>

● 其实,使用#{}格式的占位符时,Mybatis在处理时会使用预编译的做法,所以,在编写SQL语句时不必关心数据类型的问题(例如字符串值不需要添加单引号),也不存在SQL注入的风险!这种占位符只能用于表示某个值,而不能表示SQL语句片段!

● 当使用${}格式的占位符时,Mybatis在处理时会先将参数值代入到SQL语句中,然后再执行编译相关过程,所以需要关心某些值的数据类型问题

(例如涉及字符串值时,需要在编写SQL语句时添加一对单引号框住字符串),并且,存在SQL注入的风险!其优点是可以表示SQL语句中的任何片段!

● 在一般情况下,应该尽可能的使用#{}格式的占位符,并不推荐使用${}格式的占位符,即使它可以实现“泛用”的效果!

● 在一些特殊的情况下,如果一定要使用${}格式的占位符,必须考虑SQL注入的风险,应该使用正则表达式或其它做法避免出现SQL注入问题!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值