mysql中美元符号_Mybatis中#号和美元符号$符号的区别

1.#{变量名}可以进行预编译、类型匹配等操作,#{变量名}会转化为jdbc的类型。

select * from tableName where id = #{id}

假设id的值为12,其中如果数据库字段id为字符型,那么#{id}表示的是‘12’;如果是整型,则id的值为12,

并且Mybatis会将上面SQL语句转化为jdbc的 select * from tableName where id =?,把?参数值设置为id的值。

这种方式使得sql语句是经过预编译的,它是把#{}中间的参数转义成字符串。

如下所示:xml映射文件

select * from xiaoxiao x,sister s where x.id=s.xiaoxiao_id and x.id=#{id};

该xml映射文件会到相应的数据库中请求相应的数据 ,并响应显示在控制台上或者系统页面上

2、${变量名}不进行数据类型匹配,直接替换

select * from tableName where id = ${id}

如果字段id为整型,sql语句就不会出错,但是如果字段id为字符型,那么sql语句就改写为

select * from tableName where id = '${id}'

3、#{}方式能够很大程度上防止sql注入;而${}方式无法防止sql注入。

根本就是: #{}这种取值方式是先编好sql语句再进行取值,即先编译后取值;而${}这种方式是先取值后再去编译sql语句,即先取值后编译。

注意:mybatis框架作为一款半自动化的持久层框架,其sql语句都要我们自己来手动编写,这个时候当然需要防止sql注入。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值