00:00
好,第六个例子呢,是查询ID不大于三的所有的用户的ID列表,我们先把它写上。叫做。Test。Public。Wide test6。好,然后接下来呢,我们还是把这个query rapper呢给他。定义出来,然后接下来呢,我们来查询一个不大于三的,那么我们用我们现在要做的这个叫做子查询啊。使用。子查询好怎么使用子查询呢?Query rapper呢,有一个方法叫in circle,在这个in circle里面呢,我们可以写一个叫ID。然后接下来呢,我们写一个查询语句,这个查询语句呢,实际上就是子查询select ID from。User。然后。Where啊,然后ID不大于三,就是小于等于三,当然了,我们这边应该是UID哈。
01:06
UID。Select。UID啊,然后UID对不对,好这样的话呢,我们的这个啊ins和就写好了,好我们先来执行一个查询,看看它最终生成的是词口语句长什么样,User map.select select,呃,这个select呢,我们去。嗯,我先用select list啊好,然后接下来呢,Query rapper,然后接下来呢,我们在这个地方呢,给它返回一个结果叫user,然后接下来呢,我就user点还是for each sy好,然后接下来呢,我来进行一个执行,看看他最终能执行出来一个什么样的SQL语句。好,我们来看啊,这块他报了一个错是不是,我们来看他是什么情况啊,他说user那就表明错了是不是啊,那我们呢,在这个地方是不是得写T_UC呀,好,接下来呢,我们再来执行一下。
02:23
好,那我们来看一下最终的这个查询的结果。啊,他的查询结果是这样的。把它拿出来看一下,叫select u ID。就是查询的列啊,然后from什么呢?From tea where啊,我们看后面这块就是uidin,是不是它是帮助我们组装了一个什么呀,一个in语句啊,一个in语句,然后呢,In语句后面的这个内容就是刚才咱们写到这个里面的第二个参数,注意。这块。
03:00
是对应我们这个位置对吧?啊,然后这块。对应的是我们的这第一个参数UID,所以它最终会组装出这样的一个语句,那呃,这个就告诉我们什么呢?如果我们想在我们的这个后面的where条件当中组装这个子查询的话,我们可以用这种in circle的形式来写啊,可以用in的形式来写,当然了,实际上为什么说这个东西不是特别常用呢?因为其实通过query rapper来组装子查询呀,本身就不是一个呃,就是可读性非常高的这么一个方式,所以啊,通常情况下遇到这种比较复杂的查询的话呢,我们会在哪做呀,会直接在user map当中去写这样的一个SQL语句了啊,我们直接在这写,其实可读性会更高一些啊,而且他还会面临一个问题,是什么问题呢?就是在这种SQL语句当中呢,如果这个地方是一个变量的话,那么有可能就会引起我们的这个SQL注入的问题啊,所以说呢,怎么去注入呢,就比如说后这这句话。
04:05
是由用户在客户端输入的,然后呢,我们是通过一个变量的形式把它取出来,比如说4G。啊,然后circle。哎,这样写啊。好,然后接下来呢,我们把这个circleq放在这,也就是说这个最终呢,是通过某一个渠道由用户手动输入的,那么用户很有可能会在这个地方输入类似这样的语句,那这样的话呢,就造成了一个搜Q注入啊,那就会使我们前面的这个查询就失效了,是不是啊,所以这个就其实也不是特别推荐啊,那所以呢,我们呃其实呢,如果你真要实现这个方案的话呢,第一就是在这个里面直接写circle口啊,直接写circle,然后把谁变成变量呢,把三变成变量啊给它存进去,并且呢,用那种问号,用query rapper的呃,用那个呃,Prepare statement的形式,那这样的话呢,避免SQL注入对吧,然后接下来呢,把这个地方。
05:05
就是我们还可以进行一个优化,怎么优化呢,就是实现方案呢,可以采用一些,嗯,其他的实现方案,比如说在这个地方呢,我们用另外一种方式啊。这样写。把这个复制呃屏蔽掉,然后另外一种方式呢,就是如果不写这个XL啊,要用这个query rapper实现的话呢,我们还可以这样写叫query rapper啊然后。点in啊。IDID。一。二。三是不是也行啊,当然这种写法是有局限性的,那么我们必须得知道呢,小于等于三的只有这三个,如果再多了的话,可能就不太好处理了,比如说100个,是不是你不能一个一个写好,这是啊,一种方案啊,就是in,顺便呢,我们也了解一下这个in,这个in呢,它所实现的功能呢?
06:02
就是帮我们组装一个印啦。好,那我们生成的SQL语句呢,就是这个样子的,在这个where后面。它会有一个u ID in。啊,所以呢,它实际上是完成了和我们刚才的这个子查询相同的一个功能。啊,这是一种方案,那么另外其实还有一种方案更为简单,就是query rapper.light。啊Le啊。Less than and equals对不对啊,ID。L等于三。好,这个也可以,这也可以,所以说呢,针对于一个需求。啊,针对于这样一个需求,我们可以写出这三种方法来啊,那这样的话呢,帮助大家呃,就是知识面更拓宽一下吧,这三个方法呢,你都了解一下,好,那最优秀的方法肯定是这个了,是不是啊好,那这是我们这样的一个例子啊。
07:07
这是第六个例子。
我来说两句