00:00
好,那我们接着说这个动态搜狗啊,呃,那么上午在下课之前呢,我们把这个动态搜狗呢,简单的给大家去介绍了一下,对吧?呃,说了一下呃,他的一个这个这个它的一个基本的概念啊,他是干什么事的,然后呢,在什么需求下面会用到我们这个动态烧烤,然后呢,这个也是买be离子非常强大的一个特性了啊,大家必须要把它学会啊。呃,那么对于这个动态烧烤来讲的话呢,其实我们主要呢,就是学这么几个标签啊,他们几个标签的一个用法,然后在使用这么几个标签的时候呢,我们需要结合一个OJNL啊这样的一个表达式啊,这个东西的话呢,我们上午也说过啊,这不是我们学习的重点理解吧,不是我们学习的重点,在这个位置的话呢,我们只需要能简单的会用它就可以了啊,就是我一会会写几个表达式啊,然后我写出来以后呢,我会告诉你是什么意思,然后呢,你能看得懂就OK了,听懂了吧,啊说的这个不是我们研究的重点啊。
01:00
啊,那么接下来我们就直接来,呃,进入到我们这个动态搜狗啊标签的一个学习,首先呢,我们先来看一下if跟这个V啊,这两个呢,我们就放到一起来讲了。好吧,那我们来模拟一个需求来,我把我这个都关掉,我们重新来去写一个接口啊,我就不在上午的这个接口里面去加了,然后呢,我重新再去用一个接口,好,还是拿这个employee来举例子啊,我们叫做大的make个搜口啊,就是动态搜口的好,有一个接口,然后我们就必须要有一个啊。哎,是不是得有一个映射软件啊好employee啊map,然后呢,后面是改成这个动态搜啊。好大家的么个SOOK,然后呢,把这个再来改一改啊,这里面的东西呢,我们就都把它去掉了。好,这个地方改一下。好,大家每个搜口啊,好没问题,呃,然后我们这么来做啊,就是呃,我们来通过查询啊,就是上午我们在下课之前呢,给大家去分析过的这个东西还记得吧,对吧?啊,我们就来模拟这些情况啊,当然了哈,我们不会去具体的写一个什么查电脑或者什么的,还是基于我们的employee来去查啊,我也通过几个条件的来去给大家模拟这个效果啊。呃,那么现在我所要做的事情什么呢?我要去查员工,因为现在我们不确定能查出几个来啊,所以说呢,我就使用一个集合来去接收,因为条件不固定,那么最终的结果集呢,它也是不固定的,能明白吧,好,Get emps,然后呢,BY,我们的condition就是条件的意思啊,现在我们用的是这个if,还有这个where,好,我把这两个呢都给它加上,呃,那么我们在查的时候呢,我们在这个位置就需要给它传条件,好来听我分析了啊,这个首先呢,要把那个明白了,传什么条件呢?就是我也不确定我有几个条件。
02:59
明白吧,我也不确定将来你会传给我几个条件,但是呢,对于员工的查询来讲,我们来看一下,因为员工表里面呢,最基本的信息呢,就只有这么几个,这就是我们最基本的一个信息吧,对吧,这个外建我们暂时就不研究了啊,所以说对于将来查员工来讲,无非你就是总共1234,总共有四个条件吧,但是呢,这四个条件里面呢,我们不确定有哪一个,因此我们在写的时候呢,我们就没办法说,诶单独写个ID啊,或者单独写个这个last name啥的,没办法这么去写,能听懂吧?啊,那我就干脆把它封装成一个对象啊,我就给你传一个引爆的对象,但是这个对象呢,大家注意啊,它只是作为一个数据传输对象来去使用的。
03:43
听懂了吧,那么将来我有哪些条件呢?我就往这里面去封装,而对于我这个查询这一方来讲,其实我也不知道你传给我的这个对象里面都有哪些数据,我是需要经过一个一个去判断才能确定下来有哪些条件的。能听懂这个意思了吗?啊,我们就不需要说,哎,在这个位置去写出啊,那四个参数来了,我们直接写一个对象类型的,把所有的条件的都给它封装进去,明白了吧?啊,说这个先要明白啊,要不的话,到时候你看代码的时候,你就会怀疑这是什么情况啊,怎么拿上一个员工去查多个员工啊,不是这个意思啊,他只是作为一个数据传输对象来去使用的,听懂了吗?OK,好,来把这个写好以后,我们就直接回到我们的哎映射文件中,我们来去写一下,好,这是一个查询,把名字拷贝到ID这个位置,最后返回的呢,我们就使用这家tap,让它直接返回一个employee对象就可以了。
04:39
好,来把这个拷贝一下。OK,考到这儿,然后接下来呢,我们就可以去写我们的搜Q语句了,呃,那我们要查什么呢?我们查的数据其实好确定,无非就是ID,然后呢,Last下发线内蒙。好,Email,然后呢,这个真的是不是查这些啊,好,然后呢,从哪个表查呢?从这个tbl employ表,好,接下来will后面的东西我们就不好写了,因为我不确定我要通过哪些条件查吧,你传给我几个条件,我这个位置就会出现几个条件,能听懂吗?这个是不固定的,因此呢,我们就得判断啊,判断什么呀?如果说你ID是有的哈,那我就要写上ID要等于井号大括号ID能明白这个意思吗?并且假如说你的last name也是有的哈,那我要写上,哎,条件与条件之间我肯定要出现一个and是不是啊and,比如说last下划线内要等于井号大括号last name OK,那么同样的道理哈,我们and email是不是等于几号大括号email啊,好,再and针是不是要等于几号大括号真啊,OK,这是我们的分析出来的。
05:57
那么现在的问题就是,我不确定这几个东西到底有没有,那我也就不能确定这个条件到底要不要出现在我最终的这个so里面。
06:07
能明白这个意思吗?所以说接下来我们要做的事呢,就是我来判断一下你传递给我的这个数据传输对象里面这几个值到底有没有,有我就把它想办法拼到我的so后里面,没有那我就不管你了,所以说这个位置我们就要使用我们的来注意,第一个就是我们的if if是一个判断,听懂了吧,然后呢,把你要判断的这个so索句呢放到if的中间,那么在这个位置我们要写的就是啊判断的一个表达式了,好,然后这个里面我们写的就是OJL表达式,比方说现在我想判断ID只要不等于空,那我就可以把这个条件拼上了,能明白吧?好,怎么判断ID不等于空呢?特别简单,ID不等于空,这就是一个表达式,能看懂吗?哎,特别简单啊,好,那么这个我们就判断完了,那现在往后看,下面也是同样的道理,我们也要通过if呢来给它做一个判断,好,写到这,那应该就是last name,注意哈,我们是要判断它里面的那个。
07:08
属性值吧,对吧,说的写的是大写的啊,它呢也不能等于空。对吧,啊,并且比如说我想判断的严格一点,你不等于空的话呢,有时候你可能是一个空字不串。因为你是字符串嘛,是不是有可能是一空字符串啊,对吧,所以说我希望你还不能是一个空字符串,那我应该怎么判断呀。那这个地方首先我们要去写一个并且了,对吧?但是并且大家注意啊,这个an的符号对于我的XL来讲,它是一个特殊字符,我们是不能直接这么去写的,理解吗?所以说呢,遇到这个特殊字符我们怎么办呀?哎,我们就得使用我们的就是大家所谓的那个转义是吧?其实呢,严格来讲叫做实体,明白吧,哎,严格来讲呢,叫做实体,好那这个东西怎么写呀,And它的这个转业或者是那个实体呢,是and amp,大家还记得吗?这个,哎,我带着你们看过这个东西吗?看过吧,诶,就是这么来去写的and amp啊,那么这就是一个and,它的一个作用,好and什么呀,就是这个拉name呢,它不能等于一个空字符串,那么空字符串你写出来以后是不是又有冲突了吧,对不对,好,那怎么办呀,第一种办法简单一点的,就使用两个单引号就行了,如果说我非要使用双引。
08:29
的话,那你就直接使用and Qt,这个是双引号的意思,And Qt,这就是两个双引号,你就得这么去写了,听懂了吧,一定要注意在XL中诶,一些特殊字符我们是不能直接往这方去写的,能明白吗?好,所以说这就是一个实体啊,那这个东西你去哪去找呢?如果说我记不住,那你就去到我们那个有一个W3的手册,还记得吗?诶,到那里里面去找就行了,好来接着往往后看,下一个也是一个一。
09:03
然后呢啊,我们这个位置来说一下啊,好,那么就是email他也不能等于空,并且注意哈,除了这种方式之外呢,哎,这个OJNL表达式呢,它为了我们更加方便的去表达并且的关系,你直接可以写一个and。明白吧,在ogl中直接写个and,它就代表的是两个and符号了,好,And什么呀,And email呢,也不能等于空字不串,那这一次呢,我就使用单引号来去表示了,这个效果跟这个效果是一样的,理解吧,好,那么可能有有同学在想,呃,万一你就是一个空格呢?你想一想啊,就是一个空格,这个既不等于空也不等于空字符串,但是这个空格是不是也不对呀,我那我就希望是不是给他去个空格啥的呀,对吧?OK,怎么去空格啊?哎,注意Java里面是通过tri吧,这里面也是email.tri调一个方法。
10:05
它是支持调方法的,能理解吗?哎,调二个方法我就把空格去掉了,空格去掉以后呢,我再判断你不能等于空,听明白了吧?哎,所以说呢,这就写好了,好再来往下看,那最后一个也是一个if了,那么这个的话,我们就得判断不能等于啥呀,哎,就是真的,你要么就是等于等于零,或者是不是这个东西啊,能写吗?哎,很明显也不行,那应该能猜到是什么二啊对吧?二什么呀,真点等于等于一,要么呢你就是零,要么呢你就是一,除了零跟一之外我不认识。明白了吧,所以说你看这样的话呢,我们就可以判断出来了,你不管哪个条件存在,或者哪个条件不存在,我最后呢,都能拼接生成一个烧烤尾距,理解了吗?所以说这就是我们的一个动态,So考对吧,这是动态的,这里面哪个将来会出现到我的这个搜口语句里面的,我不确定,我得根据你的条件才能什么得到这个结果。
11:07
明白了吗?好,那么暂时呢,我们就先把它写成这个样子的,我们先来做一个基本的测试,然后呢,我们再从中呢给大家去啊,诶发现几个问题,我们再来分析分析,好来,接下来我们再去写一个测试方法。好,有一个测试类啊,我们叫做测试MYBA的动态考。好来,这是测试我们的if啊,Test我们的if啊,那我还得把我们的封装好的那个方法给它拿过来啊,这个方法呢,还是给他拿过去,我们依旧可以直接来去使用啊,好,拿过来啊,拿过来以后呢,我们就可以啊在这里面去写了啊,还是先过去我们的so session factory,好把这个再来写上一次,好把这个异常的抛一下,然后下面的话就是我们的circle session啊,来获取一下,好,这样open一个session,好我们再写上track finally,在finally里面呢,主要就是想把这个session给它关掉,好,那么这个位置我们再获取我们的employee,然后呢,动态so烤,哎,就是它get map啊,Employee。
12:30
动态搜点class,好把它写到这个位置,然后接下来我们就来去查啊,你看map点我们要去get是不是这个呀,对吧?好那么他就需要帮我们查一个条件啊,来我先把这个地方写出来,最后返回的是一个集合,好因为我不确定能查回来多少的数据啊,所以我就写成一个集合,然后我们再把这个集合呢给它输出一下。好大个棒,呃,那么对于这个条件的话呢,它就是一个employee对象,我们来给它封造一下啊,Condition等于new一个employee,看明白了吗?然后呢,呃,在这里面我们就要去给他条件了啊,比如说一开始的话呢,我就把这个条件都给上,理解吗?我把条件都给上啊,ID email last name真的都给上,OK,那我们就来写一下啊,随便找一条数据啊,就找谁啊,找这个Tom吧,好写一点好吧,1012 Tom看到了吧。
13:25
那我们写的就是condition.site id1012对吧?好下一我们的last name就是我们的to,好下1EMAIL哎,点考好考第点赛着什么呀,赛着真的他真的是什么来着。啊,一是吧,OK,把一给它写进去,好,那么现在我们来看,嗯,这应该是个小写的是吧?好,那么现在我们就来看一下,现在我写好以后,条件也有了,那么他就可以根据我们传进去的这个条件的去帮我们查具体的一个数据,OK来运行了啊我们来看结果。
14:16
好,大家来看这个结果,那么现在的话,他就查到了一条数据,看到了吧,我们主要是看这个so考语句哈,你看一下我们刚刚拼写的这几个条件是不都有啊,看到了吗?都有吧,OK,好,那么现在我们挨个把这个条件去一下,你看好了哈,假如说这个真的没有了,就是我传条件的时候呢,这里面是不带这个性别的,好,那我们来运行一下,你就会发现什么呢。So句里面那个真的还有没有,没有了吧,同样的道理,如果说我要把这个email也去掉呢,啊,Email也去掉,我们再来测试。好,大家来注意这个里面email是不是也就没有了,能看懂吗?看明白了吧,OK,好或者说呢,你看好了啊,我再把这个拉也去掉,是不是他也没有了,好来再来运行。
15:13
OK,你来看一下还有没有啊拉,STEM是不是也没有了对吧,就是相当于你没有条件,那我最终呢,就不会出现这个so尾距,那要是我把这个也去掉呢。都没有了吧,都没有的话,它就会出现一个问题,看到没有啥问题啊,你看他说有一个so空语句的错误,那么其实我们一看你也能发现这SQL语句V结束了,是不是就出现问题了,或者说呢,你看是这样的,假如说我这个拉是有值的,但是呢,ID是没值的,我们再来看这个也会有一个问题,VR后面直接出现了一个and。看到没有对吧,所以说现在我们写的这个正常情况下它是没有太大的问题的,但是如果说条件只要一不确定啊,就是不固定的时候,诶,那么你写的这个就会出现一些问题了,好吧,那我们就来把这个问题解决一下,怎么解决啊。
16:11
其实最本质的问题就是where跟这个and的问题了,是不是我们得考虑这个where能不能出现,以及这个and能不能出现啊,大概是这样的,我给大家分析一下,假如说你有条件,那么will是必须要出现的,假如说你没条件,那will就不能出现。能明白吗?啊,然后and呢,And前面必须要有一个条件,如果说我是第一个条件,那我前面不能出现and,那你说这个怎么做啊。这个怎么做呀?啊,看来这个大家确实是啊,没在JDBC里面写过这个啊,啊,那我教给你一种就是我们在JDBC里面会做的事啊,就是把这个前面的加上and。
17:04
明白吗?都加上and,那如果都加上and的话呢,我就得确保我这些条件的前面必须得有一个条件吧,对吧,但是我条件都拼接到这了,那我让它出现个什么条件呢?出现个一等于一。你来看一下行不行,这个条件就是一个恒成立的吧,对吧,但是呢,你看一下在一等于一后面直接拼按的有没有问题啊,没有问题,所以说现在你再怎么测试它也没有问题的,你比如说你来测试,现在我直接出现一个last name哈,那我们来查他查到的就是什么呀,你看这个so口L语句啊,WHERE1等于1AND什么什么是不是可以的,好,或者说呢,我把这个东西都给它去掉了,那么一个条件都没有,那它就是一个WHERE1等于一,而这个VR1等于一的话呢,跟我们不写这个VR是不是一样的效果啊,就这个条件有没有,是不是这个so号的结果都是一样的,好,那这就解决了,明白了吗?啊,这是我们JDBC里面会这么做,在买白T里面的话,我们就不要这么做了,你都能想到这个问题,买VE蒂能想不到吗?康定能,所以他怎么解决这个问题呢?你只需要把所有的这个if判断的这个条件给它搁到一个位。
18:22
标签中这个事儿就搞定了,看到了吗?所有衣服的判断啊,就这一对衣服的判断,条件的判断呢,我都搁到了一个VR标签中,然后呢,注意这个我就注释掉了,在我整个搜QL语句里面,我没有写V关键字,而是呢通过一个VR标签来去解决的,现在我们先来判断啊,先来看这个效果对不对,来A型我一个条件都没有啊,现在。好,大家能看到他后面是不是什么都没有啊,当我出现了一个条件呢。哎,比如说呢,哎,我出现了其中,呃,那出现了其中的一个条件吧,比如说呢,就出现一个ID,但前面我是不是写了一个and呀,哎,我们来看看他能不能解决这个问题啊,出现一个ID来运行一下。
19:08
好,注意结果是不是也出来了,然后我们看so后一句为关键字出来了没有,而且前面的这个and还有没有没有了。看明白了吗?所以说呢,这个为他做什么事呢?大家能总结出来吗?We做什么事呀?首先呢,他要什么呀?诶在我们的so口语句中,然后呢,是不是要去去什么呀?诶提供我们这个where关键字吧,诶把这个V关键字一定要什么提供上啊,并且呢,他还要解决什么呀?诶并且要解决注意是第一个出现的and或者是or的问题,就是啊你and能理解的话,如果把这个换成二,效果是不是一样的?对不对?哎,它就是来解决这个问题的,当然它只能解决第一个出现的and,或者是啊,明白了吗?哎,那么其实它能解决第一个的话,我们正常使用也就没问题了,你就让什么呀,每个上面我都统一都加上and,如果说你是第一个条件,那么他就把这个and给你去掉了,后续的每个条件你往上拼,是不是直接有个and是正常的呀,对吧?哎,那你就学会我这种方式去写就行了,明白了吗?好,那么这这就是我们的will以及if的一个用法。
20:25
听明白了吧?OK,好,来,就给大家讲这么多啊。
我来说两句