前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Mybatis#{} 和 ${} 的区别

Mybatis#{} 和 ${} 的区别

作者头像
botkenni
发布2023-10-23 20:16:13
1410
发布2023-10-23 20:16:13
举报
文章被收录于专栏:IT码农IT码农

#{}${}这两个语法是为了动态传递参数而存在的,是Mybatis实现动态SQL的基础,总体上他们的作用是一致的(为了动态传参),但是在编译过程、是否自动加单引号、安全性、使用场景等方面有很多不同。

预编译可以类比java类的编译,java类被编译成class文件,载入虚拟机,载入虚拟机的字节码文件可以先被编译成机器码,那么在执行某行代码的时候就可以直接执行编译后的机器码,而不用从字节码开始编译再执行,那么执行效率就高了。这也是为啥热机状态比冷机状态可以抗更多负载的原因。

Sql的预编译也是一样的道理,在执行前就编译好,等执行时直接取编译结果去执行。省去编译时间。Sql预编译后会在参数位置用占位符表示。所以预编译就是:数据库驱动在发送Sql和参数到DBMS之前,先对Sql语句进行编译处理,之后DBMS则可以直接对Sql进行处理,不需要再次编译,提高了性能。这一点mybatis 默认情况下,将对所有的Sql 进行预编译处理。

1、能用 #{} 的地方就用 #{},尽量少用 ${}

2、表名作参数,或者order by 排序时用 ${}

3、传参时参数使用@Param("")注解

tips:

@Param注解的作用是给参数命名,参数命名后就能根据名字得到参数值(相当于又加了一层密)如:

Role selectById(@Param("roleId") String id);

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-10-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档