#{} 和 ${}区别

1、参数是Integer类型时候没区别(#是预编译SQL,$是即时SQL)

2、当参数是String类型时,就会出错了

(1)这是$的报错信息,因为我们的参数admin并没有加引号所以不满足字符串条件

(2)正确的SQL

(3)改正的办法(给${name}加上单引号)

3、#{} 和 ${} 的区别就是预编译SQL和即时SQL 的区别

4、SQL的执行流程

(1)解析语法,检验SQL有没有问题

(2)SQL优化,编译,制定执行计划

(3)执行SQL

5、

(1)#的SQL效率更高

(2)#的SQL更安全(防⽌SQL注⼊)

6、SQL注入

(1)' ' or 1='1'(这人就成了为空或者1等于1)此时这个代码就成恒成立的了,会把我们所有的数据都显示出来
(2)他可能会对我们的数据库进行更改或者删除操作(' ' ;drop table XX;--')'   '两个引号是一个语句,但是真正执行的时候后面的引号被我们注掉了,就成了两个执行语句,一个空,一个删除语句(这个问题现在已经被MyBatis解决掉了,被MyBatis拦截了)
(3)此时用List接受的话,就会把所有东西数据都返回出来
(4)并不是写了一定会有问题,可以用输入验证的方法来避免
7、$存在的意义(不需要加引号的时候不能用#,例如表名,字段名,列名等)
当我们需要对数据进行逆序正序排序的时候
(1)使用#(错误)
会执行失败因为我们用#我们的SQL识别的代码是
desc上多了个引号,所以会报错,不能有这两个单引号
(2)使用$(正确)
  (3)如何避免SQL注入
(3.1)
(3.2)不接受用户url输入的参数,参数由后台来处理
8、模糊查询
(1)通过$来实现(这个方法没法换成#)
(2)利用CONCAT函数来使用#实现

相关推荐

  1. httphttps区别

    2024-04-07 18:42:02       58 阅读
  2. “==”“equals”的区别

    2024-04-07 18:42:02       61 阅读
  3. == equals 的区别

    2024-04-07 18:42:02       64 阅读
  4. MyBatis ${}#{}区别

    2024-04-07 18:42:02       58 阅读
  5. @Controller @RestController 区别

    2024-04-07 18:42:02       65 阅读
  6. 回归分类区别

    2024-04-07 18:42:02       52 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-07 18:42:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-07 18:42:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-07 18:42:02       82 阅读
  4. Python语言-面向对象

    2024-04-07 18:42:02       91 阅读

热门阅读

  1. 机器学习模型调优简介

    2024-04-07 18:42:02       25 阅读
  2. 一些有用的Enterprise UX Design 地址

    2024-04-07 18:42:02       40 阅读
  3. spring rest

    2024-04-07 18:42:02       36 阅读
  4. Redis之缓存穿透、击穿、雪崩

    2024-04-07 18:42:02       32 阅读
  5. 程序员35岁会失业吗?

    2024-04-07 18:42:02       45 阅读
  6. 4款免费可用的数据集成平台亮点

    2024-04-07 18:42:02       53 阅读
  7. Redis之缓存穿透、击穿、雪崩

    2024-04-07 18:42:02       43 阅读
  8. 在CentOS 7上安装MySQL 8.0的详细步骤讲解

    2024-04-07 18:42:02       44 阅读
  9. DM数据库状态

    2024-04-07 18:42:02       37 阅读