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.一般能用#的就别用$.

MyBatis排序时使用order by 动态参数时需要注意,用$而不是#

字符串替换

默认情况下,使用#{}格式的语法会导致MyBatis创建预处理语句属性并以它为背景设置安全的值(比如?)。这样做很安全,很迅速也是首选做法,有时你只是想直接在SQL语句中插入一个不改变的字符串。比如,像ORDER BY,你可以这样来使用: ORDER BY ${columnName}

这里MyBatis不会修改或转义字符串。

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

mybatis #与$区别相关推荐

  1. Mybatis-Plus和Mybatis的区别

    原文:https://blog.csdn.net/qq_34508530/article/details/88943858 . . . . . . 区别一 如果Mybatis Plus是扳手,那Myb ...

  2. Ibatis与Mybatis的区别—侧重于Ibatis

    目录 一.什么是Ibatis? 1.iBatis是一款轻量级的持久化框架 2.iBatis最大的特点是将SQL语句与Java代码分离 3.iBatis具有以下几个关键组成部分: 二.Ibatis与My ...

  3. 木木的Java知识整理——JDBC与MyBatis的区别

    看了几篇大佬的相关整理,可以总结成如下几部分. JDBC与MyBatis的区别 一.各自定义 1.1 JDBC 1.2 MyBatis 二.JDBC与MyBatis的区别 一.各自定义 1.1 JDB ...

  4. hibernate与mybatis的区别和应用场景

    mybatis 与 hibernate 的区别和应用场景(转) 1    Hibernate : 标准的ORM(对象关系映射) 框架: 不要用写sql, sql 自动语句生成: 使用Hibernate ...

  5. 框架:Hibernate和Mybatis的区别

    Mybatis和hibernate不同, Mybatis不完全是一个ORM框架,因为MyBatis需要程序员自己编写Sql语句,不过mybatis可以通过XML或注解方式灵活配置要运行的sql语句,并 ...

  6. MyBatis_ibatis和mybatis的区别【转】

    1. ibatis3.*版本以后正式改名为mybaits,它也从apache转到了google code下:也就是说ibatis2.*,mybatis3.*. 2. 映射文件的不同 ibatis的配置 ...

  7. JPA、Hibernate、Mybatis的区别

    2019独角兽企业重金招聘Python工程师标准>>> 1.概念: Hibernate :Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装 ...

  8. SSH(Struts,Spring,Hibernate )和SSM(SpringMVC,Spring,MyBatis )的区别,抽丝剥茧的给你讲清楚

    SSH 通常指的是 Struts2 做前端控制器,Spring 管理各层的组件,Hibernate 负责持久化层. SSM 则指的是 SpringMVC 做前端控制器,Spring 管理各层的组件,M ...

  9. ibatis和mybatis的区别

    1. ibatis3.*版本以后正式改名为mybaits,它也从apache转到了google code下:也就是说ibatis2.*,mybatis3.*. 2. 映射文件的不同 ibatis的配置 ...

  10. hibernate 和 mybatis 的区别

    [转载]:JAVA面试中问及HIBERNATE与 MYBATIS的对比,在这里做一下总结 转载于:https://www.cnblogs.com/virgosnail/p/10054987.html

最新文章

  1. 智源研究院发布《2020北京人工智能发展报告》,剖析北京AI发展的17个中国“第一”...
  2. C语言:构建一个二级链表并完成增删改查
  3. DataGridView中回车键的妙用
  4. 【centos6.5 安装 node.js + npm】
  5. windows10和ubuntu16.04双系统下时间不对的问题
  6. umask命令:设置文件的默认权限掩码
  7. Zxing 的集成 ---- Maven 对应 Gradle 的写法
  8. 1.1 为什么选择Excel绘制论文图表
  9. PAPI性能测试工具的安装、使用及实例
  10. C Tricks(十八)—— 整数绝对值的实现
  11. 图形交互界面_室内量房APP哪家强?5款软件深度测评(界面UI体验篇)
  12. 【数字信号】基于matlab CEEMD数字信号分解【含Matlab源码 1383】
  13. 打破信息茧房-我主动获取信息的方法 -#3
  14. CentOS7下MariaDB安装及配置
  15. 关于什么是AndroidX(一)
  16. steam邮箱登录教程
  17. O2O模式成功案例分享 汲取精华化为己用
  18. 浅谈知识表示之语义网络、RDF和OWL
  19. 数学基础 - 第十八章 平行四边形
  20. YC++编译器最新版主要功能及特点简介, 请广大的编程爱好者试用,并且希望能提出更多宝贵意见,使此软件更加完善。谢谢!

热门文章

  1. POJ 2406 Power Strings
  2. VC学习笔记:状态栏
  3. (html字体图片纯css插件)Font Awesome
  4. 孙鑫VC学习笔记:第十三讲 (四) 生成可串行化的类
  5. java添加日志打印出sql语句_实现Mybatis在控制台和日志文件中打印SQL语句
  6. 拓端tecdat|【视频】Lasso回归、岭回归等正则化回归数学原理及R语言实例
  7. 拓端tecdat|R语言回测交易:根据历史信号/交易创建股票收益曲线
  8. 拓端tecdat|python图工具中基于随机块模型动态网络社团检测
  9. 拓端tecdat|r语言ggplot2误差棒图快速指南
  10. cannot import name ‘Imputer‘ from ‘sklearn.preprocessing‘