文档章节

mybatis $ # 区别

Jian~
 Jian~
发布于 2015/08/19 14:35
字数 585
阅读 18
收藏 0

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注入攻击,因此你不应该允许用户输入这些字段,或者通常自行转义并检查。

说一下用#{},和 ${}传参的区别,

使用#传入参数是,sql语句解析是会加上"",比如  select * from table where name = #{name} ,传入的name为小李,那么最后打印出来的就是

select * from table where name = ‘小李’,就是会当成字符串来解析,这样相比于$的好处是比较明显对的吧,#{}传参能防止sql注入,如果你传入的参数为 单引号',那么如果使用${},这种方式 那么是会报错的,

另外一种场景是,如果你要做动态的排序,比如  order by   column,这个时候务必要用${},因为如果你使用了#{},那么打印出来的将会是

select * from table order by  'name'  ,这样是没用,

目前来看,能用#就不要用$,


本文转载自:

共有 人打赏支持
Jian~
粉丝 1
博文 48
码字总数 11074
作品 0
苏州
mybatis 和 hibernate 区别?

最近面试遇到一个问题,面试官问你们项目使用 mybatis 还是 hibernate?我说当然使用现在主流的 mybatis 了。面试官继续问:为什么不使用 hibernate?说下原因,以及这两个框架的区别?........

举个_栗子
2017/11/02
0
0
Mybatis与Hibernate区别

以前没怎么用过mybatis,只知道与hibernate一样是个orm数据库框架。随着使用熟练度的增加,发现它与hibernate区别是非常大的,结合至今为止的经验,总结出以下几点: 1. hibernate是全自动,...

开源oschina
2014/04/11
0
1
Mybatis 通用 Mapper 3.2.0 发布

最新版本3.2.0 - 2015-09-02 移除MapperInterceptor拦截器,以后不能在通过拦截器配置 增加mybatis-spring特殊支持,主要是根据mybatis-spring项目增加了下面两个类: tk.mybatis.spring.ma...

Liuzh_533
2015/09/02
13.1K
24
Mybatis # 和 $ 的区别

感谢:http://www.cnblogs.com/dato/p/7027949.html 浅谈 Mybatis中的 ${ } 和 #{ }的区别 好了,真正做开发也差不多一年了。一直都是看别人的博客,自己懒得写,而且也不会写博客,今天就开...

zyx870805
03/30
0
0
求javaWeb方向的大神们,关于mybatis的一些小问题,真的特别特别疑惑!

比较Hibernate和Mybatis的区别: 学到了关联这里我发现Hibernate和Mybatis的区别真是大的不得了,所以我过来想问问: ①还能和Hibernate时候让表自动生成吗? ②还能和Hibernate一样在配置文...

上帝爱众生
2015/03/31
80
1

没有更多内容

加载失败,请刷新页面

加载更多

讲述下 :LVM逻辑卷管理遇到的问题

LVM学习逻辑卷管理创建逻辑卷遇到的问题 1 实验环境 系统 内核 发行版本 CentOS 2.6.32-754.2.1.el6.x86_64 CentOS release 6.10 (Final) 由于是最小化安装没有xfs命令,yum安装如下包支持此...

linuxprobe16
35分钟前
0
0
day95-20180922-英语流利阅读-待学习

Hey Jude 半个世纪传唱不衰的背后故事 毛西 2018-09-22 1.今日导读 2004 年,The Beatles 被《滚石》杂志选为“历史上最伟大的 50 位流行音乐家的第一位”。这四名来自英国利物浦的男孩不仅对...

飞鱼说编程
42分钟前
1
0
OSChina 周六乱弹 —— 放假前期焦虑症晚期

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @andonny :分享Matteo的单曲《Panama》: 《Panama》- Matteo 手机党少年们想听歌,请使劲儿戳(这里) @新垣吉衣OSC :我发现只要去有小朋友...

小小编辑
57分钟前
150
8
wait()被notify()后,接着执行wait()后面的语句

wait()被notify()后,接着执行wait()后面的语句

noteman
今天
1
0
Ubuntu集群-使用MAAS开始裸机安装

Ubuntu使用MAAS装机的七个步骤。 1、Setup your hardware You need one small server for MAAS and at least one server which can be managed with a BMC. It is recommended to have the M......

openthings
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部