1

2

3

select * from table_name where id=#{id};

select * from table_name where id=${id}; 

区别:

在动态SQL解析阶段,#{}会被解析为JDBC预编译语句的参数标记符(占位符),例如上面的#{}语句将被解析为:

1

select * from table_name where id=? ;

  而${}则直接解析为字符串变量替换,当变量id的传参为"xiaoming"时,上面的${}语句将被解析为:

1

select * from table_name where id='xiaoming'

  也就是说,对于变量替换,#{}发生在DBMS中,而${}发生在动态SQL解析阶段。

实际使用:

1、当变量为表名时,只能使用${},这是因为#{}解析的占位符在进行变量替换时,会带上单引号' ',表名带单引号会导致SQL错误。

2、除了上面第1条之外,能用#{}的地方尽量用#{},这是因为相同的预编译SQL可以复用,用#{}能够节能开销提高性能;${}会引起SQL注入问题,例如:

1

select * from ${tableName} where name = #{name}

  当tableName为 " user; delete user; --"时,SQL将被解析为:

1

select * from user; delete user; -- where name = ?;

  这样就造成了严重后果(-- 等于注释)。

参考:http://blog.csdn.net/pfnie/article/details/53230994

MyBatis中使用#{}和${}的区别相关推荐

  1. mybatis与php,浅谈mybatis中的#和$的区别

    浅谈mybatis中的#和$的区别 发布于 2016-07-30 11:14:47 | 236 次阅读 | 评论: 0 | 来源: 网友投递 MyBatis 基于Java的持久层框架MyBatis 本 ...

  2. 【mybatis】mybatis中 的# 和 $的区别

    mybatis中 的# 和 $的区别 参考地址:https://www.cnblogs.com/sxdcgaq8080/p/10869144.html 转载于:https://www.cnblogs. ...

  3. MyBatis中selectByExample和selectByExampleWithBLOBs区别

    MyBatis中selectByExample和selectByExampleWithBLOBs区别 先贴一段自动生成的Mapper代码 <select id="selectByExa ...

  4. 【MyBatis】MyBatis中#{}与¥{}的区别

    文章目录 mybatis中#{}与¥{}的区别 mybatis中#{}与¥{}的区别 #{} 是预编译处理,像传进来的数据会加个" "(#将传入的数据都当成一个字符串,会对自动传入 ...

  5. [转]MyBatis中resultType与resultMap区别

    MyBatis中关于resultType和resultMap的具体区别如下: MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap. res ...

  6. 浅谈 Mybatis中的 ${ } 和 #{ }的区别

    1.美图 一.举例说明 select * from user where name = "dato"; select * from user where name = #{name ...

  7. mybatis中resultMap和resultType区别,三分钟读懂

    先说结论: resultmap与resulttype的区别为:对象不同.描述不同.类型适用不同. 说人话就是,resultmap和resulttype功能差不多,但是resultmap功能更强大 re ...

  8. 【Mybatis中¥{}域#{}的区别】

    #{}是预编译处理,${}是字符串替换. 详情: (1)mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值. (2)mybatis在 ...

  9. mybatis中的$与#的区别

    #:占位符 $: 字符拼接符 占位符:占位符就是在某个地方占领一个位置,把它单独作为某个东西,比如这里就是把它作为 值.  字符拼接:字符拼接就是简单的对字符串拼接.没有特殊的其它含义. 当 sele ...

最新文章

  1. 中国现代化进程专题讲座——有感
  2. Windows Live Messenger  正式版已经发布
  3. 华硕主板X99-E WS/USB 3.1 Intel Realsense D435摄像头掉线是否与Intel推行的xhci有关?
  4. 第一次执行时没有问题,重复执行会出错、GP循环
  5. Oracle数据库日常管理之数据备份,恢复及迁移 (第五讲 )
  6. 微博开放第三方协议 媒体机构能重掌话语权吗?
  7. 七句话道出做人的底线【精辟】
  8. wps打印预览工具栏消失_在WPS电子表格中看不到打印预览怎么办?
  9. python爬虫详细-Python爬虫|Python爬虫入门(一):爬虫基本结构简单实例
  10. 网卡参数设置建议与各个网卡参数含义详解
  11. 横沥东莞注塑工艺需要考虑的7个因素
  12. 挑战华为社招:不止面试题,笔记源码统统都有,最强技术实现
  13. glibc 知:手册84:附录E:平台特定设施
  14. 【C/C++】多维向量vector
  15. [Luogu P3960] [UOJ 334] [NOIP 2017 tg]列队
  16. 网络知识点之-APR协议
  17. 部分期刊的缩写(计算机方向)、期刊缩写及其影响因子的查询方法
  18. 大学生HTML个人网页作业作品:基于html css实现围棋网页(带设计报告4800字)
  19. 中国移动互联网业的“云”端厮杀
  20. JAVA编写还款提醒短信的时间判断

热门文章

  1. 虚拟列表控件---加载大数据行
  2. java5年转c语言,时隔5年,C语言再次领先Java,荣登编程语言排行榜第一!
  3. 寻路机器人单片机程序示例_单片机精华程序代码示例:DS1302时钟程序
  4. 语言怎么绘画人物肖像_坦培拉绘画技法——油画简史
  5. java服务器测试_正确的方法来测试服务器是否在Java中运行?
  6. python字符串常用方法_字符串常用方法
  7. listView分批和分页加载数据
  8. android 一个activity定时更新另一个activity的UI
  9. 二、LInux系统安装Java
  10. 五十六、 白话讲解商业智能 BI、数据仓库 DW、数据挖掘 DM