当前位置: 首页 > news >正文

MyBatis第三课

目录

回顾 

#和$区别

#(预编译SQL)和$(即时SQL,它是进行的字符串拼接)的区别,其中之一就是预编译SQL和即时SQL的区别

原因:


回顾 

两者的共同点

MaBits可以看作是Java程序和Mysql的沟通桥梁,底层还是(jdbc)

访问数据库还得是Mysql

多表查询(慢)

1.通常情况下,数据库集群是很多项目一起使用的,当出现慢查询的时候,会影响整个集群,也就是会影响所有使用该集群的项目

2.JAVA服务器扩容更方便

数据库集群扩容需要DBA处理

Mybatis

并不关注你的多表查询还是单表查询,他更主要的是把数据库的映射到JAVA对象中。

#和$区别

假如用

下面是不加引号报的错

不能使用#的情况

1.如果是排序的时候,传递asc还是desc的时候,假如asc会给参数加上''

有#他的传递过来的asc就会多加一个引号,从而报错 

下面是使用$的结果,可以看到正常运行。

2.假如生活中,使用模糊查询的时候

使用#

使用$符号就会可以使用

$存在的漏斗 SQL注入(面试题)

什么叫SQL注入呢:

通过操作输入的数据来修改事先先定义好的SQL语句,以达到执行代码对服务器进行攻击的方法。

我的个人理解,假如王者荣耀输入用户id,本来他的id是传递字符型之类的,这时候,你加入个引号啥的比如说 

xxx‘里面是你的王者荣耀名字’,这个时候你在里面写了‘我是帅哥’,那么这样,他的两个引号,就会先遇上,也就是说xxx''我是帅哥'‘,此时两个引号靠近,那么就是让数据库误解,误认为你的那个'是语句结束的标志。

$符号报错

#符号不发生报错,正常运行

#(预编译SQL)和$(即时SQL,它是进行的字符串拼接)的区别,其中之一就是预编译SQL和即时SQL的区别

1.预编译SQL性能更高

2.预编译SQL不存在SQL注入的问题

排序的时候不可以使用#

表名,字段名等作为参数时,也不能使用#

模糊查询,如果使用#,需要搭配mysql的内置函数concat,而不能直接使用。

实际生活中,能用#都用#,不能用等时候再用$(要考虑SQL注入这个问题)

原因:

SQL执行

1.语法解析

2.SQL优化(但是这个是服务器的对他本身的优化,不是程序员:加索引的优化方式)

预编译SQL:编译一次之后,会将编译后的SQL语句缓存起来,后面再去执行这条语句的时候,不会再次编译,省去了解析优化的过程,以此提高效率

3.SQL执行

数据库连接池

数据库连接池负责分配,管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个。

国内中比较流行的Hikari,Druid(ALibaba)

公司内部会告诉你到时候,了解即可

相关文章:

  • day-09 删除排序链表中的重复元素
  • GAMES101:作业7记录
  • 【Go】excelize库实现excel导入导出封装(三),基于excel模板导出excel
  • Linux shell编程学习笔记39:df命令
  • Go语言使用gosseract 库来进行图像文字识别,识别出来的中文是乱码的?如何解决?
  • linux项目部署(jdk,tomcat,mysql,nginx,redis)
  • python学习笔记10(选择结构2、循环结构1)
  • 【Linux】Linux系统编程——Linux目录结构
  • 【驱动】TI AM437x(内核调试-02):dynamic 动态打印调试
  • 微信小程序Canvas画布绘制图片、文字、矩形、(椭)圆、直线
  • Spring整理-Spring框架的国际化
  • 根据gbt81702008数值修约的C#函数
  • Logstash:迁移数据到 Elasticsearch
  • MySQL 8.0中新增的功能(八)
  • Python+甘特图及标签设置
  • 【跃迁之路】【699天】程序员高效学习方法论探索系列(实验阶段456-2019.1.19)...
  • express如何解决request entity too large问题
  • idea + plantuml 画流程图
  • Javascript基础之Array数组API
  • Js基础知识(一) - 变量
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • 简单实现一个textarea自适应高度
  • 理解在java “”i=i++;”所发生的事情
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 小程序 setData 学问多
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • 第二十章:异步和文件I/O.(二十三)
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • ​Java基础复习笔记 第16章:网络编程
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • ​学习一下,什么是预包装食品?​
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • (BAT向)Java岗常问高频面试汇总:MyBatis 微服务 Spring 分布式 MySQL等(1)
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (接口自动化)Python3操作MySQL数据库
  • (六)DockerCompose安装与配置
  • (实战篇)如何缓存数据
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • .net 4.0 A potentially dangerous Request.Form value was detected from the client 的解决方案
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径
  • .net 设置默认首页
  • .NET3.5下用Lambda简化跨线程访问窗体控件,避免繁复的delegate,Invoke(转)
  • .NET导入Excel数据
  • .sh文件怎么运行_创建优化的Go镜像文件以及踩过的坑
  • [ C++ ] STL priority_queue(优先级队列)使用及其底层模拟实现,容器适配器,deque(双端队列)原理了解
  • [ CTF ]【天格】战队WriteUp- 2022年第三届“网鼎杯”网络安全大赛(青龙组)
  • [ vulhub漏洞复现篇 ] Apache Flink目录遍历(CVE-2020-17519)
  • [ 代码审计篇 ] 代码审计案例详解(一) SQL注入代码审计案例
  • [30期] 我的学习方法
  • [BZOJ 3680]吊打XXX(模拟退火)