MyBatis第三课

目录

回顾

[#和区别](#和区别)

[#(预编译SQL)和(即时SQL,它是进行的字符串拼接)的区别,其中之一就是预编译SQL和即时SQL的区别](#(预编译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)

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

相关推荐
chilavert3182 分钟前
技术演进中的开发沉思-356:重排序(中)
java·开发语言
毕设源码-邱学长2 分钟前
【开题答辩全过程】以 基于SSM的儿童福利院管理系统为例,包含答辩的问题和答案
java·eclipse
TT哇8 分钟前
【实习】数字营销系统 银行经理端(interact_bank)前端 Vue 移动端页面的 UI 重构与优化
java·前端·vue.js·ui
Elieal18 分钟前
SpringBoot 数据层开发与企业信息管理系统实战
java·spring boot·后端
识君啊18 分钟前
MyBatis-Plus 逻辑删除导致唯一索引冲突的解决方案
java·spring boot·mybatis·mybatis-plus·唯一索引·逻辑删除
Coder_Boy_19 分钟前
Java开发者破局指南:跳出内卷,借AI赋能,搭建系统化知识体系
java·开发语言·人工智能·spring boot·后端·spring
QT.qtqtqtqtqt21 分钟前
SQL注入漏洞
java·服务器·sql·安全
NE_STOP21 分钟前
spring6-代理模式和AOP
spring
独自破碎E24 分钟前
BISHI23 小红书推荐系统
java·后端·struts
xqqxqxxq26 分钟前
Java IO 核心:BufferedReader/BufferedWriter & PrintStream/PrintWriter 技术笔记
java·笔记·php