文档章节

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'  ,这样是没用,

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


本文转载自:

共有 人打赏支持
上一篇: 农历7.11
下一篇: mybatis 积累
Jian~
粉丝 1
博文 48
码字总数 11537
作品 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
Hibernate 与mybatis的区别

首先简单介绍下两者的概念: Hibernate :Hibernate 是当前最流行的ORM框架,对数据库结构提供了较为完整的封装。 Mybatis:Mybatis同样也是非常流行的ORM框架,主要着力点在于POJO 与SQL之间...

quickhelper
2015/08/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

当程序员有了中年危机 你会发现你就是个屁

前言 程序员是一个怎样的存在?引用一句鸡汤的名言来说:你以为你用双手改变了世界,实际上是苍老了自己。为什么我今天会抛出这个话题,其实我也是一个懵懂的少年,我也曾经为了成为一名程序...

架构师springboot
3分钟前
0
0
大型网站B2C商城项目实战+MongoDB+Redis+zookeeper+MySQL

本文列出了当今计算机软件开发和应用领域最关键部分,如果你想保证你现在以及未来的几年不失业,那么你最好跟上这些技术的发展。虽然你不必对这十种技术样样精通,但至少应该对它们非常熟悉。...

java知识分子
4分钟前
0
0
大型企业网络系统集成方案如何设计?

网络系统集成是企业实现无纸化办公和即时通讯办公的基础建设,在以生产效率为核心竞争力的市场中,企业想要快速获取信息并有效提高企业工作效率及业务能力,企业网络系统集成是必不可少的,由...

Java干货分享
5分钟前
0
0
Spring应用学习——IOC

1. Spring简介 1. Spring的出现是为了取代EJB(Enterprise JavaBean)的臃肿、低效、脱离现实的缺点。Spring致力于J2EE应用的各层(表现层、业务层、持久层)的解决方案,Spring是企业应用开...

江左煤郎
6分钟前
0
0
用Redis轻松实现秒杀系统

导论 曾经被问过好多次怎样实现秒杀系统的问题。昨天又在CSDN架构师微信群被问到了。因此这里把我设想的实现秒杀系统的价格设计分享出来。供大家参考。 秒杀系统的架构设计 秒杀系统,是典型...

James-
13分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部