首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

mybatis中#{}和${}的区别

先来回顾一下mybatis 核心概念 :

mapper中使用#{}格式的语法在mybatis中使用Preparement语句来安全的设置值

执行SQL:select * from emp where name = #

参数:employeeName=>Smith

解析后执行的SQL(我们打开debug日志控制台可以看到):select * from emp where name =

#方式能够很大程度防止sql注入

有时你只是想直接在 SQL 语句中插入一个不改变的字符串。比如,像 ORDER BY $将传入的数据直接显示生成在sql中

执行SQL:select * from emp where name = $

参数:employeeName传入值为:Smith

解析后执行的SQL(我们打开debug日志控制台可以看到):select * from emp where name =Smith

总结:#方式能够很大程度防止sql注入,$方式无法防止Sql注入;$方式一般用于传入数据库对象,使用$要么不允许用户输入这些字段,要么自行转义并检验。一般能用#的就别用$。

再回顾下JDBC执行流程:

加载JDBC驱动;

建立并获取数据库连接;

创建 JDBC Statements 对象;

设置SQL语句的传入参数;

执行SQL语句并获得查询结果;

对查询结果进行转换处理并将处理结果返回;

释放相关资源(关闭Connection,关闭Statement,关闭ResultSet)。

结合JDBC的执行过程,不难发现归根结底的区别是CreateStatement 和 PrepareStatement 的区别。

每周一句:找到做事的准则、模式和反模式。准则:原则应用到实践中;模式:你应该做的;反模式:你不应该做的。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20191004A0BIZX00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券