博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mybatis #{} 和 ${}的差别
阅读量:6811 次
发布时间:2019-06-26

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

默认情况下,使用#{}语法,MyBatis会产生PreparedStatement语句中,并且安全的设置PreparedStatement参数,这个过程中MyBatis会进行必要的安全检查和转义。

最直观的差别和理解就 像下面这样

示例1:执行SQL:Select * from emp where name = #{employeeName}参数:employeeName=>Smith解析后执行的SQL:Select * from emp where name = ?示例2:执行SQL:Select * from emp where name = ${employeeName}参数:employeeName传入值为:Smith解析后执行的SQL:Select * from emp where name = Smith

还有一些其他的差别,如下:

1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是id,则解析成的sql为order by "id".

2. $将传入的数据直接显示生成在sql中。如:order by $user_id$,如果传入的值是111,那么解析成sql时的值为order by user_id,  如果传入的值是id,则解析成的sql为order by id.

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

4.$方式无法防止Sql注入。

5.$方式一般用于传入数据库对象,例如传入表名. 

6.一般能用#的就别用$. 

转载于:https://www.cnblogs.com/kong-lin/p/5657728.html

你可能感兴趣的文章
180.8. Initialization store
查看>>
Calico 的默认连通性 - 每天5分钟玩转 Docker 容器技术(69)
查看>>
Oracle分页查询格式(十二)
查看>>
Spring AOP面向切面
查看>>
MySQL索引类型以及创建
查看>>
SQL优化常用方法33
查看>>
大数据与人工智能让轨道交通运维更高效更便捷
查看>>
【RAC】参数CLUSTER_INTERCONNECTS
查看>>
DBA+北京社群第二次线下沙龙归来
查看>>
【网络数据与科学】大数据时代:领航未来 大数据四大趋势凸显
查看>>
Java---对象与类的封装
查看>>
最有价值的信息就是这样的信息:大象是绳子,大象是扇子,大象是柱子…… 这样的信息往往是扭曲的,残缺的,隐晦不明的(转)...
查看>>
java.text.MessageFormat 专题
查看>>
css知多少(5)——选择器
查看>>
怎么修改阿里云企业邮箱LOGO等信息?
查看>>
单链表的操作和函数指针的基本使用
查看>>
MySQL---数据库从入门走向大神系列(十)-Connection对象池、装饰模式与动态代理模式...
查看>>
阿里云oss挂载到linux本地文件系统
查看>>
接班人不是克隆出来的:华为再显接班难
查看>>
把自1970年1月1日以来的秒数转化成年月日
查看>>