$ 与 #

$ 与 #这两个符号区别在当时上课的时候怕是人人都记得的,但却没用过,这次刚好有个典型的例子就吧他记录下来吧。

    <update id="updateBusiness">
        UPDATE ${param1} SET
        ${param2} = ''
        WHERE id = #{param3}
    </update>
void updateBusiness(String tablename, String clumnName, String id);

这个sql是修改指定表的指定列的某个字段,这也是我第一次做这种表名和列名做为变量传进来的情况。

(1)这里用到的两个符号的区别主要是,这两个符号在解析的时候会不会自动加引号的问题,

  1)$这个符号是不会给加引号的,如果你使用这个符号还需要加引号的话,就只能手动加引号

  2)#这个符号,如果传的参数是字符串类型的话,他会给自动添加上引号

  3)所以上面的sql被解析后的样子是

UPDATE demo SET title = '' WHERE id = ? 
 ==> Parameters: 06399898134089257498906178950622(String)

即:UPDATE demo SET title = '' WHERE id = '06399898134089257498906178950622' 

(2)在总结下这两个符号的区别

    #{}: 解析为一个 JDBC 预编译语句(prepared statement)的参数标记符,一个 #{ } 被解析为一个参数占位符 。

      ${}: 仅仅为一个纯碎的 string 替换,在动态 SQL 解析阶段将会进行变量替换。

(3)我理解的他们两个的区别

  1)#{}是被解析成一个占位符,可以防止sql注入,${}只是字符串的拼接,有安全隐患

  2)#{}会给变量添加引号,${}不会添加

  

转载于:https://www.cnblogs.com/excellencesy/p/9892247.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值