00:00
好,下面呢,我们就把我们刚才所说的这个动态circle啊,通过动态circle,然后把我们的这个多条件查询呢,然后咱们来实现一下。好,首先大家来看,我们现在创建一个新的map接口,然后咱们现在要来实现的是动态circle的功能,那所以说咱们叫做dynamic circle。大家注意dynamic的话就是动态的意思啊,然后再加上我们的map就可以啊,好OK,那下面我们来找到我们当前的这个映射文件,然后把咱们的映射文件给创建出来。然后我们要保证咱们的命名空间要跟我们my be map接口的全类名保持一致来点,然后dynamic circle map就OK了啊,比如说我们下面咱们先来写咱们的第一个功能啊,然后杠星星回车,然后是根据实现咱们的多条件查询,好那多条件查询既然是一个查询功能,那咱们查询出来的数据就有可能是一条,也有可能是多条,那所以说我们现在不确定的情况下,那我们是不是只能来使用list的集合。
01:11
来进行获取,对吧,因为如果咱们查询出来的有多条,而如果我们。只通只通过我们的一个实体类对象来获取的话,那这个时候它是不是应该会给我们报一个错,叫做too many results exception对吧?啊,行,那大家来看,那我们当前咱们的这个泛型设置成emp,然后咱们叫做get emp,然后叫做by condition啊condition condition的话就是条件的意思啊,行,那我们现在呢,比如说咱们是多条件查询,那咱们就把我们的员工信息的这个员工名称,年龄、性别,还有邮箱,把这四个都作为我们当前咱们查询的一个条件,所以说我们在这需要传输过来的就是一个EP对象就OK了啊。行,那我们把咱们的这个SQ语句,把这个方法呢放到我们当前的映射文件中,然后把这个SQ句呢来写一下,咱们要来保证方法名跟SQ句的ID一致,那我们在这呢,咱们只查询员工信息,所以说我们只需要来设置一个type就行啊好,因为我们设置的有类型别名,所以说咱们直接写emp就可以。
02:22
下面select的星,然后from t_EP,好,然后加上咱们当前的while关键字,那下面我们是不是就可以来加上咱们的条件了,但是呢,咱们的条件你并不能说我直接把它给加上,因为如果我们当前咱们没有设置这个条件的话,那我们的S口句中是不能拼接这个条件的,所以说我们就需要来进行判断,而我们的my be的动态circle中为我们所提供的判断功能的标签呢,然后就是咱们的if标签,大家来看其中呢,有一个test的属性,也只有一个test的属性,然后后边有个括号叫做required,表示的是必须,那所以说我们在使用if标签的时候,这个test这个属性啊,我们是必须要用到的啊,行,OK。
03:12
那行,那我们现在咱们该如何来进行判断呢?大家注意,我们在这儿的话,咱们要想去判断谁,那我们只需要直接来访问这个数据就行,比如说我们当前传输过来的是emp对象,那我们当前咱们要想来判断我们所传输过来的员工对象中的员工姓名的话,那大家只需要在这儿来写E内就可以了,并不需要来写井号大括号或Dollar大括号,这个大家注意啊,好,那我们刚才也说了,那它特殊的值呢,就有两个表示的是我们不需要设置这个条件。首先第一种情况就是我们没有传输这个数据的时候,那我们在服务器中获取的是null,而如果我们当前没有在文本框中去设置这个值,我们在服务器中获取的就是空自无串,那所以说我们现在咱们来判断的话,什么时候才需要去添加这个条件呢?当一内不等于null,然后。
04:12
后,并且当它不等于空字符串,那并且的话,大家都知道咱们应该这样去写,但是大家会发现它直接报错了,因为这个东西在我们当前咱们的买杯在我们的叉ML里面,它算是一个特殊字符,所以说呢,我们不能这样去写,那我们的买杯子就给我们提供了一个非常直接的方式,咱们可以直接用并且这个单词啊,也就是and OK吧,好,然后下面in name,当它不等于空字符串,那这个时候咱们才需要加上这个条件,比如说一内等于井号大括号一内。这个大家都能看懂吧,也就是说如果我们当前满足if标签中test所对应的条件的话,那我们在标签中所写的这一个内容就会拼接到我们当前的circle中,OK吧,好啊,行,那下面的话其实都是一样的,比如说然后咱们来写咱们的第二个叫做A级,当它不等于空,然后并且咱们的A级不等于空字符串,然后这个时候的话,那我们就需要把A这个条件加上,那大家来看,那这个时候咱们在加条件的时候怎么去加呀?
05:25
啊,我们是不是因为我们要跟上面的条件进行拼接,那所以说我们的每个条件之间,咱们要么用的是and,要么用的是or,那比如说我们现在咱们是多加一个条件,咱们要查询的更精确一些,那所以说咱们中间就要用and对不对?好,然后A等于井号大括号A级,然后再往下大家看,剩下咱们就来复制一下就可以啊。比如说咱们的这个条件呢,是咱们的sex,然后sex好,如果sex不等于空或不等于空字符串,那我们就加上这个条件,然后最后一个应该是咱们的email邮箱。
06:04
好,然后如果邮箱不等于空,并且不等于空字不串,那我们就需要加上这个条件,最后一个did的话,那咱们就先不加了,OK吧,大家来看一下啊,找到咱们的my be,然后找到咱们的员工表,把它给打开,咱们这里面呢,还有一个dad,那这个dad的话,咱们就先不加了啊好,然后这个时候我们的SQ句咱们就已经写完了,那下面呢,咱们就可以来测试一下,比如说呢,咱们在我们的这个测试类中,然后咱们来创建一个啊包没有创建是吧啊com.at归国,然后点my my be,然后点test,点点dynamic circle。Map。然后test啊行,大家来看,咱们把咱们的这个测试类呢,放到咱们的这个包中啊。
07:01
行OK,那下面呢,大家来看一下,我们就把这个功能呢来测试一下,首先呢,咱们先来创建一个g unit的测试方法啊,叫做test get e,然后by condition。好,OK,那我们第一步呢,也是要先来获取我们的circle session对象,然后获取完成之后来获取我们的map对象,Get a map,然后叫做dynamic,然后circle map.class OK,啊好,获取完之后,那大家来看,那这个时候我们要来调用的方法就是咱们的get的EP带condition方法了,然后我们在这可以传输进去一个emp对象,首先咱们的第一个是ID null,对吧,然后咱们其他的呢,比如说我在这写个张三,然后这个年龄呢,然后咱们来写个23,然后这个性别呢,咱们来写一个男,然后再往下这个邮箱是123艾特QQ,然后点com,好,那我们现在咱们已经把我们的对象给创建出来了,对吧?把对象已经作为方法的参数,然后呢,这个放到了我们的参数位置,那我们现在呢,大家来看,比如说我们现在把我们的这一个。
08:16
集合呢,然后咱们把它给输出一下,那大家来看一下,看有没有问题啊,首先呢,咱们可以先自己去观察一下我们当前咱们的EP内,然后包括我们当前咱们的这一个年龄性别,还有邮箱,它都是不为空,并且不为空字不串的。啊,那在这咱们应该是写错了是吧。啊,这个咱们没有改啊,因为我们当时为了给大家来做我们的字段名跟属性名不一致的情况,所以说咱们这个不叫一内对吧,这个大家注意啊,这应该叫EP name对吧。啊,然后这个地方也是,这个地方应该是字段名,所以说是EP下划线内幕,而我们当前咱们的井号大括号里面来访问的是实体类中的属性名,所以说应该是emp内幕,哎,这个大家注意啊,好,那下面我们在这咱们直接来执行一下这个方法,大家来看一下有没有问题,那因为咱们所传输过来的这几个数据呢,它都不为空,并且不为空自不串,那所以说我们当前的每一个条件它都是满足的。
09:22
那都满足了之后。那我们的每个条件是不是都会被拼接到我们的S尾句中?大家来看一下来well emp下划线内幕对吧,然后a sex,然后email都没有问题,那现在问题来了,那比如说我现在有的条件,它是不符合规则的,比如说啊,大家看咱们看一个最特殊的,你看如果说年龄不符合规则,那咱们这个东西没有了,就没有了,对不对?然后这个啊性别如果不符合规则,那他也不会影响我们当前咱们的操作,比如说大家看好了啊,来咱们把这个年龄,然后我把它给设置为null,好,然后这个时候我们再去执行的话,大家会发现咱们这个年龄性别,还有邮箱,当他们不符合条件的时候,都不会对我们的SQ去造成什么影响。
10:14
OK吧,但是如果我现在我的这个张三他是一个空字不串,那我们进行判断之后呢,然后张三员工姓名的这个条件,他是不满足条件的,那我们当前大家看这个不会拼接到circlel中,这个也不会拼接到circleq中,那我们的while后边是不是就会直接跟上我们的and sex,那这个时候语法还对吗?大家看一下啊,我们现在来一个执行,大家会发现直接报错,为啥大家自己看嘛,While后边直接跟了and,所以说呢,那我们当前咱们的这个so句它就不对了,那如果遇到了这种问题的话,大家说我们该如何去解决呢?咱们有没有最简单的方式,然后来解决我们的这个问题。
11:01
好。那大家来看一下,那我们可不可以在这来加上一个恒成立的条件,比如说一等于一,那这个时候呢,大家都学过恒成立的条件,对吧?如果说你没有学习过的话,大家可以在我们的一些SQL语句中,比如说查询、修改、删除可以加条件的这个circleq语句中,然后大家可以把一等于一来作为条件进行一个查询、修改或删除,然后大家会发现你加上一个横成立的条件,它跟没有加是一样的效果,所以说呢,这就是一个条件,但是它并不影影响我们当前咱们最终的一个结果,那所以说大家看一下。当我们的while后边有了一个条件之后,那我们是不是就可以去拼接咱们后边的这个and了呀。对不对?所以说大家看好了,我们当前咱们的一等一是用来干什么的?首先一等于一,它的作用有两个,第一个它可以不影响我们的查询结果,第二个它可以更好的去拼接咱们后边的这些条件,大家来看一下啊,还有一种情况,如果后边咱们这些条件都不成立的话,那咱们的while关键字是不是就不会多出来了,而while后边就有了一个一等于一这个条件对不对?
12:18
这个大家看好啊,所以说呢,来我们现在咱们再来一个执行,然后大家来看啊。好,然后大家看一下,现在咱们这个S就是没有问题的对吧,一等于一,然后后边直接跟and,然后去拼接咱们的其他的条件,这个是没有任何问题的啊。好,所以说呢,这个就是咱们的if标签,它可以通过咱们test属性中所对应的表达式,然后来决定我们标签中的内容是否要拼接到我们的circle尾句中,好,我们在这儿可以来给大家写一下。大家看啊。杠星星回车对吧,然后咱们的动态circle啊动态circle,然后咱们的第一个标签,然后叫做if,它的作用是干什么的?可以根据标签中对吧,然后test的属性所对应所对应的表达式,然后来决定对吧标签来决定咱们的标签中的内容的内容,然后是否需要拼接到咱们的circle口中。
13:29
Circle中,OK,这个大家注意,这个是咱们if标签的一个作用啊,好,那这个是我们的多条件查询,然后咱们通过第一种方式来实现的,而咱们的第一种方式就是while后边跟上一个一等于一这种恒成立的条件,再用到我们的if标签来判断各个条件需不需要拼接到SQL语句中啊,通过这种方式来实现的啊。
我来说两句