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

来源:互联网 发布:淘宝上换购是什么意思 编辑:程序博客网 时间:2024/06/12 00:52

一、举例说明

查询表user中,字段name = “dato”的数据:

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

两种sql都可以达到我们的目的,去查询名字叫dato的用户。有什么不同呢?

二、区别

动态 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了。

综上所得
#{ }变量的替换是在 DBMS 中, 而${ } 变量的替换阶段是在动态 SQL 解析阶段.
这是 #{}${} 我们能看到的主要的区别,除此之外,还有以下区别:

总结:#{}${}区别

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

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

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 这辈子就想x一次筱田优 田字加一笔 一卒之田 若田光一 田加一笔 汉字一到十田字格图片 一个田一个童 app一亩田 下载一亩田 一亩田农产品价格网 一田 ymt 老公不在时被公公簊田步一美3 一畦春韭绿 一畦春韭绿十里稻花香 畦读音 畦的读音 一畦春韭绿下一句 畦春韭绿 一畦 一畦春韭 畦怎么读 一畦拼音 花木成畦手自栽上一句 一畦春韭绿读音 畦拼音 畦的拼音 池畦的拼音 畦组词 一畦是什么意思 一畦春韭绿 十里稻花香 一畦春韭绿的下一句是什么 一畦春韭绿十里稻花香的意思 畦怎么读音 畦的意思 花木成畦手自栽 抱瓮灌畦 畦灌 什么畦春韭绿 池畦的意思