文档章节

mybatis $ # 区别

Jian~
 Jian~
发布于 2015/08/19 14:35
字数 585
阅读 36
收藏 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
博文 60
码字总数 17443
作品 0
苏州
私信 提问
加载中
请先登录后再评论。
高效 Java Web 开发框架--JessMA

JessMA 是功能完备的高性能 Full-Stack Web 应用开发框架,内置可扩展的 MVC Web 基础架构和 DAO 数据库访问组件(内部已提供了 Hibernate、MyBatis 与 JDBC DAO 组件),集成了 Action 拦截...

伤神小怪兽
2012/11/13
9.3K
3
Mybatis的分页插件--Mybatis-Paginator

用于Mybatis的分页插件,提供了服务器端的分页和排序功能。 基本的用法可以查看这里。

miemiedev
2013/06/17
1.5W
3
数据库逆向生成代码及Maven插件开发

之前使用mybatis,可以用mybatis generator逆向生成dao层代码,详见博客《数据库逆向框架代码生成工具:MyBatis Generator的使用》。公司使用的是自己开发的服务,所以最近抽空写了一个逆向生...

蛙牛
2015/12/20
6.2K
25
深度吐槽hibernate

hibernate我很久都没有用了,最后一次用应该是3年前的一个企业项目,决定采用hibernate的并不是我,是我领导,我只是开发者。我所受的罪领导并不知道。正如我的每个hibernate项目那样,每次我...

闲大赋
2015/12/23
5.3K
56
MyBatis学习手记(二)MyBatis缓存机制

MyBatis学习手记二 前:MyBatis官方学习(中文)文档 http://mybatis.github.io/mybatis-3/zh/index.html 一,首先,要使用MyBatis必须使用官方提供的MyBatis的JAR包 链接:https://github.com...

xiaolei123
2015/09/15
2K
4

没有更多内容

加载失败,请刷新页面

加载更多

这些 Java 8 官方挖的坑,你踩过几个?

Java技术栈 www.javastack.cn 关注阅读更多优质文章 导读:系统启动异常日志竟然被JDK吞噬无法定位?同样的加密方法,竟然出现部分数据解密失败?往List里面添加数据竟然提示不支持?日期明明...

Java技术栈
06/09
0
0
Python再夺冠,上古语言COBOL大流行,IEEE Spectrum 2020年度编程语言排行榜出炉!

整理 | 屠敏 出品 | CSDN 博客 领域驱动技术,技术鞭策领域。 近日,IEEE Spectrum 最新发布了 2020 年年度编程语言排行榜。IEEE Spectrum 编程语言排行榜一年发布一次,截止到今年,该排行榜...

软件绿色联盟
今天
6
0
uni-app中使用computed计算属性

computed的理解 computed里面的属性不能在data属性中出现,用来监控computed中自定义的变量 data() {return {url:"",mode:"SD",enableCamera:true,position:"front",beau......

剑龙御武
26分钟前
8
0
阿里政企云体验技术团队招聘

我们是谁 大家好,我们是「「阿里巴巴政企云体验技术」」团队,致力于打造 BG(面向政府和企业)行业背景下顶尖的体验技术,希望通过体验技术赋能我们的客户、产品以及合作伙伴。同时我们也是...

前端Sneaker
今天
0
0
OSI开放式互联参考七层模型网络协议神图!!!

本文分享自微信公众号 - 网络工程师IT技术之家(IT2020_)。 如有侵权,请联系 support@oschina.cn 删除。 本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。...

18855556625
02/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部