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进行过滤去除掉;

相关推荐
jnrjian26 分钟前
sqlplus 连接数据库等待10-20s port 6200
sql·oracle
小钊(求职中)39 分钟前
七种分布式ID生成方式详细介绍--Redis、雪花算法、号段模式以及美团Leaf 等
java·spring boot·分布式·spring·mybatis
bysjlwdx2 小时前
deploy myEclipse j2ee project to server没反应
ide·java-ee·myeclipse
luoluoal2 小时前
java项目之基于ssm的医院门诊挂号系统(源码+文档)
java·mysql·mybatis·ssm·源码
Arbori_262154 小时前
MySQL 的 SQL 语句执行顺序
数据库·sql·mysql
2401_831943328 小时前
【SQL性能优化】预编译SQL:从注入防御到性能飞跃
数据库·sql·性能优化
shaoweijava10 小时前
基于SpringBoot的美食设计网站(源码+数据库)
数据库·spring boot·mysql·mybatis
三氧化真13 小时前
使用FastExcel时的单个和批量插入的问题
java·数据库·mybatis
蓝色之鹰14 小时前
高级SQL技巧
sql
程序猿阿伟14 小时前
《探秘SQL的BETWEEN:解锁数据范围查询的深度奥秘》
大数据·数据库·sql