00:00
四呢叫condition。这个实际上,嗯,我们用的时候还挺常见的,呃,我先来说一下这个需求。我先把这个复制一下,然后咱们写一个TEST8。The public。Wide test8。好,然后呢,我把他这个需求呢,写到这个位置。好,那么这面呢,叫查询名字中包含N年龄大于十且小于20的用户,查询条件来源于用户的输入,好,这里面呢,有一个叫做查询条件来源于用户的输入,也就是说有可能呢,这会儿会有一个表单。比如说这块给你一个表单,然后表单里面呢,可能就是一个数据列表,对吧,所以下面是列表啊,很多数据,然后上面呢,有一个查询框,可以让你输入呢,就是啊,你用户名是什么呀?你用户的年龄是什么呀?对吧?啊好,然后呢,就这样两个文本框,然后最后呢有一个按钮,然后你在这个地方输入用户名和输用户的这个年龄,年龄,比如说我想啊这个查找一个年龄区间,我想查找年龄大于十岁小于20岁的用户,那么这块呢,就有两个文本框,然后最后呢是一个按钮,好,你在这边输入完了之后呢,点击这个确定按钮。
01:27
点击这个确定按钮啊,OK,好,然后接下来呢,一点击查询,那么下面呢,就会显示出一条一条的数据来,那么大家想在我们的这这就是一条一条数据啊,有点粗,就这样吧,好,那在我们的后台管理系统当中,这些查询条件是不是以变量的形式存在呀,大好,以变量的形式从前端的页面当中取出来之后呢,再整合到我们的后端的查询条件当中,那我们现在呢,就来写一下这样的一个内容,我们来看啊,首先呢,我们来看就是这个。查询这个,呃。
02:02
名字,名字中包含N,这个比较好写,叫update wrapper点。Like,是不是啊,然后呢,就是username。啊,里面呢,有N。好,这个我们已经了解了,但是前提呢是。这个N有可能是通过啊用户的一个输入输进来的,所以说呢,我们肯定呢,就是要写成变量的形式,有可能呢,是通过这个参数传进来的啊,当然了,我们呢,就先硬编码一下,那么在这个地方呢,我们就写一下string。Username等于N可以吧,啊然后接下来呢,这个username呢,我们写到这个位置,那么大家想一下,有的时候我们在前端啊做这个呃,高级查询的时候,比如说这个还是刚才那个页面。还是刚才那个页面啊,然后页面里面呢,有查询框,有的时候呢,这些查询框啊,也就是说这个文本框啊,并不是必填的,你也可以不输入这样的一个名字,我只输入年龄,或者是名字和年龄我都不输入,我直接呢,就想看所有的用户对不对啊,那也就是说在这个查询的过程当中呢,这个username呢,是可以为空的啊,如果username为空的话,我们呢。
03:18
放到这个里面做查询,那么就显得多此一举了,也就是说我们一般情况下呢,会先判断一下这个username它是不是一个空字符串,如果是空字符串的话,那实际上我们就不用做这个查询了,如果他不是空字符串,那我们呢,再做一下这个查询,好吧,嗯,那所以那怎么办呢?在这个地方传统的方式我们就判断一下这个username是不是空,我们可以用这个string u啊在我们的。苞米豆里面有一个工具叫string UUS,然后呢,这个工具里面呢,有一个方法叫is,嗯,Is not blank。好,我们把这个username呢给它传进去,这个is not blank,它。
04:04
判断的实际上就是不是blank的非啊是吧,就不not blank嘛,是不是is blank的反。飞不就是is not black吗?然后接下来呢,我们再来看一下这个is blank。这个is blank呢,就先判断一下它是不是不是none对吧?啊好,然后呢,接下来呢,如果它不是none的话。那么就。如果它如果它不等于none的话,那么就进入到这个判断来,如果它等于none的话,那么就返回true,那也就是说首先第一点就是如果它是none的话,那么它就是blank就是空啊,然后第二点就判断它有没有字符是吧?啊,如果是有字符,但是字符有什么空白什么的,它也算是也算是什么呀,也算是空啊,也算是空,如果没有字符,你看这一个字符也没有。那就不进入for,不进入for的话,是不是也算是空啊啊嗯,必须是有字符,并且这字符还不能是空白,那么它才是什么呀?才是非空,才是非空,所以这个判断呢,就是对于空字符串的判断比较严谨,它把那个空格也算成空字符串了啊好,那所以呢,我们用一下它,用一下它的话呢,那就在这个地方,我们呢来对它进行判断啊,所以呢,如果is not blank的话,那么我们再进行查询。
05:30
好,那刚才我们说的呢,是第一个查询条件username,接下来呢,我们来看第二个查询条件就是这个年龄啊,年龄的话呢,我们首先也是update wrapper点,那么它是大于等于十对不对啊,所以呢,我们在这个地方呢,可以写GE啊。啊update wrapper,然后呢,就是呃,我看一下上面这个写的是update update wrapper,我我给他改一下,改成query好一些。
06:02
Que query rapper,因为刚才这个咱们是直接从上面这块粘过来的,是不是啊,所以呢,咱们给它改成carry来来做这个查询。好,然后接下来呢,我们给它改成query rapper,点什么呢?点GE。好,GE,也就是说我们要判断的是这个年龄age啊,然后呢,和谁比呢?和这个十比,但是这个十呢,我们也是来源于用户的输入,所以呢,在上面这个地方呢,我们也啊新建一个用户的输入的年龄嘛,比如说IN7个啊,然后呢,我们写age begin等于十,对吧?接下来呢,是IN7个age and等于20啊,它的年龄呢,在十和20之间,那这个两个数字呢,在用户的界面当中,它有可能呢是两个问问框,也就是说这个呢是一个用户的界面,然后呢,有用户名的输入框,有起始年龄的输入框,还有终止年龄的输入框,好,那这两个年龄的输入框呢,是用户分别输入的,用户有可能只输入了这个,没有输入这个,也有可能呢,只输入了后面。
07:28
这个没有输入前面这个这个可以理解吧,啊,也就是说他选择其中之一输入,所以说如果是这样的话呢,作为我们来说,如果想判断的比较完整的话,把每一个情况都能够完整的给它判断进去的话,那么在这个位置呢,我们就用between呢,就不太合适,因为between呢,它只有一句话,没有办法去做两个条件判断,所以呢,我们就分别用大于小于和大于等于和小于等于做判断啊,那所以呢,这面呢,我们就判断a begin。写age begin,然后接下来呢,下面一个carry rapper点小于等于Le,啊,也是age,接下来呢,这面写age and对不对?好,接下来这个地方呢,我们就写if if什么呢?判断一下age begin是不是存在的,所以age。
08:19
Begin,如果不等于那样的话,那么。我们在执行这个查询,这可以理解吧,啊,同样的道理,如果a and不等于那样的话,那我们在执行后面的这个查询,所以这块呢,我们给它改成and,好,那这块呢,就是我们整个的一个查询条件的组装了,接下来呢,我们来进行user map啊,第2SELECT list,然后query rap,然后接下来呢,我们可以拿到它的这个users这个结果,再接下来呢,我们把users这个结果呢,给它打印一下。
09:05
好,那这样的话呢,我们整个的这个啊,查询语句就终于写完了,那我们来看一下它最终执行的这样的一个查询,那么在这种情况下,我们三个条件都有的时候呢,我们肯定最后呢,是组装三个条件进行查询,右键运行。好在这个地方呢,我们可以看到。他写select,然后where,除了我们啊前面已知的一些内容之外呢,后面就是它的条件了,Username age age,对不对,大于等于小于等于,那么好,现在用户呢,在前端的这个页面当中,它并没有输入username,那也就是说我们username拿过来之后呢,有可能是个空字符串,有可能干脆呢,就由于某一些高级的这个页面的设置啊,就username这个选项呢,根本就没出现,或者是隐藏掉了,那么它有可能是呢,有可能是空字符串,这种情况呢,我们再运行一下。
10:22
好,那么在后面的这个查询语句当中呢,大家看就没有user name什么事了。那么同样的道理,如果age begin和age and其中有一个是那或者是根本就没有出现的话,那么我们在执行查询,它同样会不去组装这样的一个查询条件。大家看这一次的查询条件呢,就只有age存在了,对不对?好,那这是我们对刚才的这个需求的一个初步的一个实现啊,但是呢,买business plus呢,针对于这种需求呢,实际上给我们提供了一个比较啊方便的一个解决方案,我们来看一下哈,无论是like也好,还是GE也好,还是Le也好,那总之呢,Query里面的很多个这样的一个查询条件组装的方法呢,它实际上呢,都有一些其他承载的一个版本,那么它承载的版本呢,就是下面这个带condition的这个带condition的这个版本呢,它的值呢,就是一个布尔值,那么如果这个布尔值为true的话,我们就执行这个查询,如果这个波尔值为false的话,那么我们就忽略这个查询,所以这个就是第一个参数condition的意义,那接下来呢,我们就来做一个具体的测试,那么怎么去做呢?很显然我们要在前面呢加一个参数,参数第一。
11:51
这个参数啊,如果是处,我们就执行这个查询,如果是false,我们就不执行这个查询,是不是恰好这个参数的值就是它呀,好,它如果是true,我们就想走这个if语句,它如果是false,我们就不想走这个if语句,好跟我们的需求是完全一致的,我们就直接把这个if里面的表达式的内容呢,放到这个地方就可以了,好这样的话呢,就简化了我们代码的开发,所以呢,这个表达式呢,我们直接放到第一个参数的位置。
12:24
把这也删掉啊,删掉哈,这是这样的,同样呢,这个表达式呢,我们也放在第一个参数这个位置。好,那同样的这个我们都给它删掉就行了。这个删掉好,那这样的话,大家看我们再结合之前我们学过的这个串联的语法格式。是不是就可以完成我们的这样的一个查询了,而且呢,它的这个呃,代码量比刚才要少很多,对不对,而且可读性其实也很高,可读性也不差啊好,那接下来呢,我们再运行一下。
13:13
好,那我们来看一下后面。大家看我们。所看到的soql语句在这儿呢,是不是跟刚才我们所看到的SQL语句是完全一样的结果呀,所以呢,这个就是condition啊,这个condition这样的一个条件呢,实际上在我们平时的这个,呃,真正的一些复杂业务的开发的过程当中啊,用的还是比较多的啊,所以这个呢,希望大家能够掌握。
我来说两句