文档章节

mybatis $ # 区别

Jian~
 Jian~
发布于 2015/08/19 14:35
字数 585
阅读 19
收藏 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'  ,这样是没用,

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


本文转载自:

共有 人打赏支持
上一篇: 农历7.11
下一篇: mybatis 积累
Jian~

Jian~

粉丝 1
博文 50
码字总数 12340
作品 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 # 和 $ 的区别

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

zyx870805
2018/03/30
0
0
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.6K
24
Mybatis中#{}和${}传参的区别及#和$的区别小结

最近在用mybatis,之前用过ibatis,总体来说差不多,不过还是遇到了不少问题,再次记录下, 比如说用#{},和 ${}传参的区别, 使用#传入参数是,sql语句解析是会加上"",比如 select * from ...

必须往前走
前天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

mysql 查询当天、本周,本月,上一个月的数据

今天 select * from 表名 where to_days(时间字段名) = to_days(now()); 昨天 SELECT * FROM 表名 WHERE TO_DAYS( NOW( ) ) - TO_DAYS( 时间字段名) <= 1 近7天 SELECT * FROM 表名 wher......

BraveLN
16分钟前
1
0
Android Multimedia框架总结(六)C++中MediaPlayer的C/S架构

前面几节中,都是通过java层调用到jni中,jni向下到c++层并未介绍 看下Java层一个方法在c++层 MediaPlayer后续过程 frameworks/av/media/libmedia/MediaPlayer.cpp 找一个我们之前熟悉的setDa...

天王盖地虎626
34分钟前
1
0
【Linux】【MySQL】CentOS7安装最新版MySQL8.0.13(最新版MySQL从安装到运行)

1、前言   框框博客在线报时:2018-11-07 19:31:06   当前MySQL最新版本:8.0.13 (听说比5.7快2倍)   官方之前表示:MySQL 8.0 正式版 8.0.11 已发布,MySQL 8 要比 MySQL 5.7 快 2 ...

Code辉
34分钟前
0
0
oracle dg备库重建redolog:ora-00313,ora-00312

trace文件: Errors in file /crbank/dbs/app/product/diag/rdbms/rdbs/dbs/trace/dbs_mrp0_24445130.trc: ORA-00313: open failed for members of log group 8 of thread 1 ORA-00312: onl......

hnairdb
47分钟前
1
0
深入分析Java I/O的工作机制 (一)

1.Java的I/O类库的基本架构 先说一下什么是类库:可以说是类的集合,类库包括接口、抽象类、具体类等。 I/O是机器获取和交互信息的主要渠道。 java在I/O上也一直在做持续的优化,在1.4版开始...

java菜分享
56分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部