mybatis #与$区别
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 #与$区别相关推荐
- Mybatis-Plus和Mybatis的区别
原文:https://blog.csdn.net/qq_34508530/article/details/88943858 . . . . . . 区别一 如果Mybatis Plus是扳手,那Myb ...
- Ibatis与Mybatis的区别—侧重于Ibatis
目录 一.什么是Ibatis? 1.iBatis是一款轻量级的持久化框架 2.iBatis最大的特点是将SQL语句与Java代码分离 3.iBatis具有以下几个关键组成部分: 二.Ibatis与My ...
- 木木的Java知识整理——JDBC与MyBatis的区别
看了几篇大佬的相关整理,可以总结成如下几部分. JDBC与MyBatis的区别 一.各自定义 1.1 JDBC 1.2 MyBatis 二.JDBC与MyBatis的区别 一.各自定义 1.1 JDB ...
- hibernate与mybatis的区别和应用场景
mybatis 与 hibernate 的区别和应用场景(转) 1 Hibernate : 标准的ORM(对象关系映射) 框架: 不要用写sql, sql 自动语句生成: 使用Hibernate ...
- 框架:Hibernate和Mybatis的区别
Mybatis和hibernate不同, Mybatis不完全是一个ORM框架,因为MyBatis需要程序员自己编写Sql语句,不过mybatis可以通过XML或注解方式灵活配置要运行的sql语句,并 ...
- MyBatis_ibatis和mybatis的区别【转】
1. ibatis3.*版本以后正式改名为mybaits,它也从apache转到了google code下:也就是说ibatis2.*,mybatis3.*. 2. 映射文件的不同 ibatis的配置 ...
- JPA、Hibernate、Mybatis的区别
2019独角兽企业重金招聘Python工程师标准>>> 1.概念: Hibernate :Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装 ...
- SSH(Struts,Spring,Hibernate )和SSM(SpringMVC,Spring,MyBatis )的区别,抽丝剥茧的给你讲清楚
SSH 通常指的是 Struts2 做前端控制器,Spring 管理各层的组件,Hibernate 负责持久化层. SSM 则指的是 SpringMVC 做前端控制器,Spring 管理各层的组件,M ...
- ibatis和mybatis的区别
1. ibatis3.*版本以后正式改名为mybaits,它也从apache转到了google code下:也就是说ibatis2.*,mybatis3.*. 2. 映射文件的不同 ibatis的配置 ...
- hibernate 和 mybatis 的区别
[转载]:JAVA面试中问及HIBERNATE与 MYBATIS的对比,在这里做一下总结 转载于:https://www.cnblogs.com/virgosnail/p/10054987.html
最新文章
- 智源研究院发布《2020北京人工智能发展报告》,剖析北京AI发展的17个中国“第一”...
- C语言:构建一个二级链表并完成增删改查
- DataGridView中回车键的妙用
- 【centos6.5 安装 node.js + npm】
- windows10和ubuntu16.04双系统下时间不对的问题
- umask命令:设置文件的默认权限掩码
- Zxing 的集成 ---- Maven 对应 Gradle 的写法
- 1.1 为什么选择Excel绘制论文图表
- PAPI性能测试工具的安装、使用及实例
- C Tricks(十八)—— 整数绝对值的实现
- 图形交互界面_室内量房APP哪家强?5款软件深度测评(界面UI体验篇)
- 【数字信号】基于matlab CEEMD数字信号分解【含Matlab源码 1383】
- 打破信息茧房-我主动获取信息的方法 -#3
- CentOS7下MariaDB安装及配置
- 关于什么是AndroidX(一)
- steam邮箱登录教程
- O2O模式成功案例分享 汲取精华化为己用
- 浅谈知识表示之语义网络、RDF和OWL
- 数学基础 - 第十八章 平行四边形
- YC++编译器最新版主要功能及特点简介, 请广大的编程爱好者试用,并且希望能提出更多宝贵意见,使此软件更加完善。谢谢!
热门文章
- POJ 2406 Power Strings
- VC学习笔记:状态栏
- (html字体图片纯css插件)Font Awesome
- 孙鑫VC学习笔记:第十三讲 (四) 生成可串行化的类
- java添加日志打印出sql语句_实现Mybatis在控制台和日志文件中打印SQL语句
- 拓端tecdat|【视频】Lasso回归、岭回归等正则化回归数学原理及R语言实例
- 拓端tecdat|R语言回测交易:根据历史信号/交易创建股票收益曲线
- 拓端tecdat|python图工具中基于随机块模型动态网络社团检测
- 拓端tecdat|r语言ggplot2误差棒图快速指南
- cannot import name ‘Imputer‘ from ‘sklearn.preprocessing‘