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中的#号与$符号的区别相关推荐

  1. MyBatis中大于号以及小于号的表达方式

    MyBatis中大于号以及小于号的表达方式 实现方案 以下介绍两种可行方法: 转义法 大于:> 相当于 > 小于:< 相当于 < 大于等于:>= 相当于 >= 小于 ...

  2. oracle resulttype,MyBatis中关于resultType和resultMap的区别介绍

    MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap,resultType是直接表示返回类型的(对应着我们的model对象中的实体),而re ...

  3. linux美元符号切换为井号,MyBatis中井号与美元符号的区别

    WebSphere性能优化的几个方法 1.更改http server的配置文件参数KeepAlive.     原因:这个值说明是否保持客户与HTTP SERVER的连接,如果设置为ON,则请求数到达 ...

  4. mybatis中$和#号的区别

    #{}表示一个占位符号,通过#{}可以实现preparedStatement向占位符中设置值,自动进行java类型和jdbc类型转换,#{}可以有效防止sql注入. #{}可以接收简单类型值或pojo ...

  5. Mybatis中大于号和小于号表示方式

    文章目录 一.使用场景 二.使用转义方式实现大于小于号的表示(等号不需要转义) 三.使用标记方式实现大于小于号的表示 一.使用场景 使用Mybaits进行SQL查询时候,无法避免要用到大于号和小于号, ...

  6. MyBatis中小于号“<“的使用

    在xml中写sql语句时,(<)小于号往往不会被解析转义,此时就需要用特定给方法解决 一:使用特殊字符转义 在限定的日期范围内查询时:>=startTime,<=endTime &g ...

  7. MyBatis中关于resultType和resultMap的区别

    使用resultType做自动映射时,要注意字段名和POJO的属性名必须一致. 使用resultType做自动映射时,可以不一致.但是你要想不一致.那么就必须在<mapper>标签下,添加 ...

  8. mybatis中的#{value}和${value}的区别

    2019独角兽企业重金招聘Python工程师标准>>> 1. #{value}将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号. 2. ${value}将传入的数据直接显 ...

  9. Mybatis中的#{xxx}与${xxx}的区别

    1.#将传入的数据当成一个字符串,会自动传入的数据加双引号"".        例如:where username = #{username}; 如果传入的值为123,那么解析sq ...

最新文章

  1. Java:定时启动线程
  2. Django rest_framework 实用技巧
  3. Python 中的闭包、匿名函数、decorator 装饰器与python的偏函数
  4. table 内 下拉列表 被遮挡_一个简洁、有趣的无限下拉方案
  5. IDEA代码格式化快捷键失效的解决办法
  6. 【详解】软件工程中的有效性威胁(Threats to validity)到底是什么?
  7. 腾讯 美团 字节 抖音 面经
  8. 线路/信道编码技术(1)——8B/10B编码
  9. java圆形_Java 打印圆形
  10. JavaScript判断设备类型
  11. qqext(QQ2012显IP外挂)V1022 绿色版
  12. Eezie and Pie
  13. datax自定义transfrom 怎么写?
  14. Originlab8 特殊字符的输入
  15. JAVA语言中 文本框类的类名是_这是什么?
  16. 半导体制造流程(五)金属化
  17. 共享单车第八年:谁狂飙,谁躺平?
  18. 创锐讯网卡 linux,高通创锐讯Atheros AR813X/AR815X/AR816X系列网卡驱动
  19. 上肢康复训练器材是什么
  20. html修改div里的图片,html 如何将div 里面的图片设置与div等宽,没有缝隙?

热门文章

  1. js function理解
  2. 【GIT】使用Git命令窗口将本地工程提交至远程GitHub
  3. CSharp设计模式读书笔记(18):中介者模式(学习难度:★★★☆☆,使用频率:★★☆☆☆)...
  4. CentOS命令行安装配置KVM详细教程
  5. 为什么linux默认都没有MP3和视频或者连FLASH都没有呢?
  6. C程序设计语言--第五章:指针与数组
  7. 超级强大的心理定律~~!你可以变成你想要的样子!~
  8. Alpha 通道的概念与功能
  9. android脚本快捷方式,Android:如何创建主屏幕快捷方式启动shell脚本?
  10. python字符串内建函数_python字符串内建函数