Mybatis中的#号与$符号的区别
1、#{变量名}可以进行预编译、类型匹配等操作,
2、#{变量名}会转化为jdbc的类型。
3、${变量名}不进行数据类型匹配,直接替换。
4、#方式能够很大程度防止sql注入。
5、$方式无法方式sql注入。
6、$方式一般用于传入数据库对象,例如传入表名。
7、尽量多用#方式,少用$方式。
8、#会自动加双引号,$不会加双引号
这两个符号在mybatis中最直接的区别就是:#相当于对数据 加上 单引号,$相当于直接显示数据(只讨论字符串类型的)。
1、#对传入的参数视为字符串,也就是它会预编译,select * from user where name = #{name},比如我传一个aaa,那么传过来就是 select * from user where name = 'aaa';
2、$将不会将传入的值进行预编译,select * from user where name=${name},比如我传一个aaa,那么传过来就是 select * from user where name = aaa;
3、#的优势就在于它能很大程度的防止sql注入,而$则不行。比如:用户进行一个登录操作,后台sql验证式样的:select * from user where username=#{name} and password = #{pwd},如果前台传来的用户名是“wang”,密码是 “1 or 1=1”,用#的方式就不会出现sql注入,而如果换成$方式,sql语句就变成了 select * from user where username=wang and password = 1 or 1=1。这样的话就形成了sql注入。
4、MyBatis排序时使用order by 动态参数时需要注意,用$而不是#
字符串替换
默认情况下,使用#{}格式的语法会导致MyBatis创建预处理语句属性并以它为背景设置安全的值(比如?)。这样做很安全,很迅速也是首选做法,有时你只是想直接在SQL语句中插入一个不改变的字符串。比如,像ORDER BY,你可以这样来使用:
ORDER BY ${columnName}
这里MyBatis不会修改或转义字符串。
重要:接受从用户输出的内容并提供给语句中不变的字符串,这样做是不安全的。这会导致潜在的SQL注入攻击,因此你不应该允许用户输入这些字段,或者通常自行转义并检查(通常我们应该对任何传来的参数都抱着不信任的做法来写程序,这样我们的程序才健壮)。
Mybatis中的#号与$符号的区别相关推荐
- MyBatis中大于号以及小于号的表达方式
MyBatis中大于号以及小于号的表达方式 实现方案 以下介绍两种可行方法: 转义法 大于:> 相当于 > 小于:< 相当于 < 大于等于:>= 相当于 >= 小于 ...
- oracle resulttype,MyBatis中关于resultType和resultMap的区别介绍
MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap,resultType是直接表示返回类型的(对应着我们的model对象中的实体),而re ...
- linux美元符号切换为井号,MyBatis中井号与美元符号的区别
WebSphere性能优化的几个方法 1.更改http server的配置文件参数KeepAlive. 原因:这个值说明是否保持客户与HTTP SERVER的连接,如果设置为ON,则请求数到达 ...
- mybatis中$和#号的区别
#{}表示一个占位符号,通过#{}可以实现preparedStatement向占位符中设置值,自动进行java类型和jdbc类型转换,#{}可以有效防止sql注入. #{}可以接收简单类型值或pojo ...
- Mybatis中大于号和小于号表示方式
文章目录 一.使用场景 二.使用转义方式实现大于小于号的表示(等号不需要转义) 三.使用标记方式实现大于小于号的表示 一.使用场景 使用Mybaits进行SQL查询时候,无法避免要用到大于号和小于号, ...
- MyBatis中小于号“<“的使用
在xml中写sql语句时,(<)小于号往往不会被解析转义,此时就需要用特定给方法解决 一:使用特殊字符转义 在限定的日期范围内查询时:>=startTime,<=endTime &g ...
- MyBatis中关于resultType和resultMap的区别
使用resultType做自动映射时,要注意字段名和POJO的属性名必须一致. 使用resultType做自动映射时,可以不一致.但是你要想不一致.那么就必须在<mapper>标签下,添加 ...
- mybatis中的#{value}和${value}的区别
2019独角兽企业重金招聘Python工程师标准>>> 1. #{value}将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号. 2. ${value}将传入的数据直接显 ...
- Mybatis中的#{xxx}与${xxx}的区别
1.#将传入的数据当成一个字符串,会自动传入的数据加双引号"". 例如:where username = #{username}; 如果传入的值为123,那么解析sq ...
最新文章
- Java:定时启动线程
- Django rest_framework 实用技巧
- Python 中的闭包、匿名函数、decorator 装饰器与python的偏函数
- table 内 下拉列表 被遮挡_一个简洁、有趣的无限下拉方案
- IDEA代码格式化快捷键失效的解决办法
- 【详解】软件工程中的有效性威胁(Threats to validity)到底是什么?
- 腾讯 美团 字节 抖音 面经
- 线路/信道编码技术(1)——8B/10B编码
- java圆形_Java 打印圆形
- JavaScript判断设备类型
- qqext(QQ2012显IP外挂)V1022 绿色版
- Eezie and Pie
- datax自定义transfrom 怎么写?
- Originlab8 特殊字符的输入
- JAVA语言中 文本框类的类名是_这是什么?
- 半导体制造流程(五)金属化
- 共享单车第八年:谁狂飙,谁躺平?
- 创锐讯网卡 linux,高通创锐讯Atheros AR813X/AR815X/AR816X系列网卡驱动
- 上肢康复训练器材是什么
- html修改div里的图片,html 如何将div 里面的图片设置与div等宽,没有缝隙?
热门文章
- js function理解
- 【GIT】使用Git命令窗口将本地工程提交至远程GitHub
- CSharp设计模式读书笔记(18):中介者模式(学习难度:★★★☆☆,使用频率:★★☆☆☆)...
- CentOS命令行安装配置KVM详细教程
- 为什么linux默认都没有MP3和视频或者连FLASH都没有呢?
- C程序设计语言--第五章:指针与数组
- 超级强大的心理定律~~!你可以变成你想要的样子!~
- Alpha 通道的概念与功能
- android脚本快捷方式,Android:如何创建主屏幕快捷方式启动shell脚本?
- python字符串内建函数_python字符串内建函数