SQL参数绑定

参数绑定的详细介绍和使用方法详见

什么是SQL绑定变量,如何实现绑定变量? 

 

本人在参数绑定应用中发现效率差别巨大

同样的查询语句执行1w次,用绑定参数方式只需10s,无绑定则用46m31s。

 

通过搜索发现参数绑定还可以解决sql注入获取密码的问题,参见下面的博客,

绑定参数原理以及SQL注入..

转载于:https://www.cnblogs.com/maggie/p/3688959.html

在Mybatis的Mapper.xml文件中,安全地使用SQL参数绑定是防止SQL注入的关键。选择使用`#{}`还是`${}`取决于你的具体需求,尤其是在安全性方面。 参考资源链接:[Mybatis ${}与#{ }的区别与安全解析](https://wenku.youkuaiyun.com/doc/6412b669be7fbd1778d469fc) `{}`的使用是一种直接的字符串替换方式,它不会对传入的参数值进行任何预处理,从而可能导致SQL注入。例如,如果你的查询语句是`select * from ${tableName}`,那么恶意用户可以通过输入`' OR 1=1 -- `来执行危险的SQL命令。 相反,`#{}`提供了一种安全的参数替换方式,它利用PreparedStatement的预编译特性来防止SQL注入。当Mybatis遇到`#{}`时,它会将参数绑定SQL语句的占位符`?`上,这样就防止了SQL注入的发生。例如,使用`#{tableName}`时,Mybatis会将它转换为带有占位符的SQL语句,并在执行时用实际的参数值替换`?`。 在实际应用中,除非需要动态修改SQL语句的结构(如动态表名或列名),否则应优先选择`#{}`。例如,在使用activiti工作流框架时,可能需要根据流程实例ID来查询历史记录,可以写成`select * from ${prefix}ACT_HI_PROCINST where PROC_INST_ID_ = #{processInstanceId}`,这里`${prefix}`是一个动态的前缀,用于指定具体的表名。 综上所述,在大多数情况下,应该优先使用`#{}`来增强Mybatis应用的安全性,并且只有在绝对必要的情况下才使用`${}`。为了更深入理解这两种参数绑定方式的区别以及如何在实际开发中应用它们,建议阅读《Mybatis ${}与#{ }的区别与安全解析》这篇文章,它将提供更多的细节和实例,帮助开发者在使用Mybatis进行数据库操作时做出正确的选择。 参考资源链接:[Mybatis ${}与#{ }的区别与安全解析](https://wenku.youkuaiyun.com/doc/6412b669be7fbd1778d469fc)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值