SQL的预编译

1、介绍

当我们开启日志之后,我们再运行单元测试。可以看到在控制台中,输出了执行的SQL语句。 

但是我们发现,输出的SQL语句为:delete from emp where id = ?,我们输入的参数 16 并没有在后面拼接,id的值是使用?进行占位。那这种SQL语句我们称为 预编译SQL

预编译的SQL,有两个优势:

1、性能更高

2、防止SQL注入

1.1、性能提升

1. 性能更高: 预编译SQL,编译一次之后会将编译后的SQL语句缓存起来,后面再次执行这条insert语句时,SQL语句一样,不会再次编译。 只是输入的参数不同。

性能提升原因见下图:

1.2、注入

防止SQL注入:将敏感字进行转义,并变得安全。

SQL注入是通过操作输入来修改事先定义好的SQL语句,用以达到执行代码对服务器进行攻击的方法。

如果不防止SQL注入,那么不管你是什么账号密码,只要登录者输入如下代码都可以登陆成功:

 所以这是很不安全的!

2、参数占位符

在Mybatis中提供的参数占位符有两种:${...}, #{...}。

 他们俩的区别(超高几率面试会问,要记好):

2.1、#{...}

执行SQL时,会将#{…}替换为?,生成预编译SQL,会自动设置参数值。

使用时机:参数传递,都使用#{…}

安全!

2.2、${...}

拼接SQL。直接将参数拼接在SQL语句中,存在SQL注入问题。

使用时机:如果对表名、列表进行动态设置时使用。

不安全!,但是合适的时候也有用

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值