JavaEE进阶---Mybatis(预编译SQL&&即时SQL&&动态SQL标签&&池化技术说明)

文章目录

1.经典面试题(#{}和${}的区别)

1.1关于#

预编译SQL:这个其实是我们使用的比较多的,而且这个的性能和下面的这个$相比较,他的这个性能会更高一些;

我们的这个预编译SQL相当于就是提前占据位置:因为我们可以在运行起来的时候查看这个控制台里面的日志,发现我们在这个#{}里面的这个内容在我们的这个程序看来就是?

然后就是根据我们传递的参数把这个参数放到那个?的位置上面去几个,这个就是提前占座的功能,有参数了直接传递过去,仅此而已;

1.2关于$

即时SQL:这个相当于说的就是我们的这个SQL是拼接得到的,这个就很容易出现问题,而且我们在使用的时候需要加上这个单引号,写起来也是相对而言比较麻烦的;

存在SQL注入的风险+即时SQL相当于是进行字符串的拼接的效果;

1.3情况下需要使用$

这个$存在这个SQL注入的问题需要我们去处理和解决,而且好像写起来也不是很方便,为什么这个方式依然存在呢,这个是因为他肯定是有自己不可替代的这个地方的,不然的话#{}也不会允许他存在,他必然可以做出来#{}做不成的事情;

排序功能,asc和desc(升序和降序),这个场景就是我们的#{}无法实现的,因为这个时候如果我们使用#{}就会在这个关键字的外面去添加这个引号,这个时候就会报错,因此在这个场景下面,必须要使用${}这样的写法,这个情况下字符串的拼接正好是符合要求的;

2.数据库连接池

2.1池化技术图解

就是这个的这个mybatis是下面的第二个情况,也就是说这个事引入了链接吃的,好处就是我们的这个connection全部都在池子里面,用户直接从这个池子里面取出来就行了,使用完了再放进去即可;

但是没有连接池的时候,我们的用户需要直接和这个数据库打交道,这个也算是我们的池子的特点,类似于之前学习的这个生产者消费者模型;

3.动态SQL

3.1if标签的使用

动态SQL主要是处理这个xml里面的数据库内容查询的时候使用的:

下面的是两个if双标签,第一个标签判断我们的这个性别是不是空的,另外一个双标签负责判断我们的这个values里面的这个内容,相当于就是把我们的这个插入语句里面使用到gender的地方全部使用if标签进行处理一下;

3.2where标签的使用

下面的这个就是select语句,我们对于查询的相关属性使用这个if标签进行判断这个age,hender,deleteFlag是不是空的,其他的都是一样的;

除了使用上面的这个if标签,我们还可以使用下面的这个where标签,where标签可以生成这个where关键字,并且去掉这个and:下面的这个就是两个之间的对比;

下面的这个prefix表示的就是去电这个前缀,因为你会发现上面的这个里面出现的and gender=#{} and deleteFlag=#{}都有这个and单词,因此我们可以使用prefix进行说明,这样我们的标签里面就不用写了;

3.3set标签的使用

set标签主要是处理我们的这个修改的SQL相关语句,suffix主要是去去掉我们的代码块的后缀(下面的两个图片左边的是trim标签,右边的是set标签);

因为我们的SQL语句里面是不应该有这个逗号的,但是我们下面的这个属性使用预编译SQL的时候需要使用逗号,因此我们添加这个suffix进行过滤去除掉;

该有这个逗号的,但是我们下面的这个属性使用预编译SQL的时候需要使用逗号,因此我们添加这个suffix进行过滤去除掉;

相关推荐
暮雨疏桐4 小时前
MySQL SQL Mode及其说明
数据库·sql·mysql·sql mode
悟空打码9 小时前
MyBatis源码解读5(3.1、缓存简介)
缓存·mybatis
_星辰大海乀10 小时前
数据库约束
java·数据结构·数据库·sql·链表
多多*10 小时前
Java反射 八股版
java·开发语言·hive·python·sql·log4j·mybatis
Auc2411 小时前
OJ判题系统第4期之判题机模块架构——设计思路、实现步骤、代码实现(工厂模式、代理模式的实践)
java·spring cloud·log4j·mybatis·代理模式·工厂模式
第十六年盛夏.13 小时前
【网络安全】SQL注入
sql·web安全·网络安全
大模型最新论文速读15 小时前
在Text-to-SQL任务中应用过程奖励模型
数据库·人工智能·sql·深度学习·语言模型·自然语言处理
佛祖让我来巡山17 小时前
【Java持久层技术演进全解析】从JDBC到MyBatis再到MyBatis-Plus
mybatis·jdbc·mybatisplus·持久层框架
luo_guibin17 小时前
DVWA在线靶场-SQL注入部分
数据库·sql·mysql
2501_9111212320 小时前
【无标题】
数据库·sql·mysql