博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mybatis注意点之#与$区别
阅读量:7236 次
发布时间:2019-06-29

本文共 724 字,大约阅读时间需要 2 分钟。

动态 SQL 是 mybatis 的强大特性之一,也是它优于其他 ORM 框架的一个重要原因。mybatis 在对 sql 语句进行预编译之前,会对 sql 进行动态解析,解析为一个 BoundSql 对象,也是在此处对动态 SQL 进行处理的。在动态 SQL 解析阶段, #{ } 和 ${ } 会有不同的表现

select * from user where name = #{ name};

#{} 在动态解析的时候, 会解析成一个参数标记符。就是解析之后的语句是:

select * from user where name = ?;

 

 

那么我们使用 ${}的时候

select * from user where name = ${ name};

${}在动态解析的时候,会将我们传入的参数当做String字符串填充到我们的语句中,就会变成下面的语句

select * from user where name = "dato";

预编译之前的 SQL 语句已经不包含变量了,完全已经是常量数据了。相当于我们普通没有变量的sql了。

综上所得, ${ } 变量的替换阶段是在动态 SQL 解析阶段,而 #{ }变量的替换是在 DBMS 中。

这是 #{} 和 ${} 我们能看到的主要的区别,除此之外,还有以下区别:

  • #方式能够很大程度防止sql注入。
  • $方式无法防止Sql注入。
  • $方式一般用于传入数据库对象,例如传入表名.
  • 一般能用#的就别用$.

所以我们在使用mybatis的时候,尽量的使用#方式!!!这是大家要注意的地方

转载于:https://www.cnblogs.com/wangzhengyu/p/8945684.html

你可能感兴趣的文章
合三为一,Linux 基金会欲打造顶级开源峰会
查看>>
《计算机系统:系统架构与操作系统的高度集成》——2.8 编译函数调用
查看>>
不要成为工具的奴隶
查看>>
IO多路复用之select/poll/epoll总结
查看>>
菜鸟Vue学习笔记(一)
查看>>
好程序员web前端分享CSS3 边框
查看>>
干货|数据区块链在钢铁行业的应用(分享实录)
查看>>
Java NIO(五)Scatter Gather
查看>>
Android 8.1平台SystemUI虚拟导航键加载流程解析
查看>>
ViewPager2结合TabLayout
查看>>
java 异常
查看>>
动手实现一致性哈希算法,并搭建环境测试其负载均衡特性.
查看>>
2019年iOS开发者中心证书生成方法以及极光推送证书使用方法!
查看>>
React笔记 (四)
查看>>
高德地图之地图的属性
查看>>
hexo+github从0到1搭建免费个人博客
查看>>
理解 CSS line-height 与 vertical-align
查看>>
IntelliJ IDEA创建第一个Spring boot项目
查看>>
Android——弧形弯曲显示的ImageView
查看>>
玩转Go语言之捕获异常
查看>>