00:00
还是接着刚才那个需求啊,那接下来呢,我们要查询出学生和班级啊所有的信息,但是这一次呢,我们要结合一种叫做VO类型的这个操作啊VO。来第21个啊。那首先呢,咱们得先来看一看啊,什么叫做VOO对吧?好啊,我们以前学过学过的几种O是吧。Pogo这现在改名叫doin了,实体类对吧?这没错吧,Pogo这个东西可不能没听过呀。
01:00
Pogo就是咱们现在这个do man OK吧,那这这个东西你不能没听过pogo OK吧,好在spring里边啊,这个实体类也叫做Java b OK吧,Java b好,那么除了这个pogo之外,咱们还学过哪种?处理咱们这个数据库表的那一层叫b to是吧,这回啊咱们叫啊VO,咱们来搜索看一看,其实这个O有好多呢啊。嗯。咱们这个po就是pogo意思OK吧,好,那么咱们这个DAOC倒成OK吧,其实它也算做其中的一种,其中这个d to和do这个概念现在已经非常的模糊了,所以说现在在企业里边已经没有这种概念的存在了,你不用去管它,但现在这个VO保留住了啊,VVO我们还是要用的,这个VO叫什么呢?
02:01
View object,但是大家注意啊,它还有一种叫法叫什么呢?Value object OK吧,也就是说我们这个object这种类是用来展现数据,也是用来展现数据值的,OK吧,以后啊,咱们叫什么比较多呢?叫这个value object比较多,也可以管它叫view object OK吧,好。来。啊。好,那么这个东西干嘛用的啊,也就是说在我们的这个实际项目开发当中啊,大家注意啊。好。在实际项目开发中,如果我们这个啊。
03:01
需要为这个前端展现的这个数据啊,使用一个do面类型啊。啊,表现出来这些数据好,那么这时我们。可以考虑。可考虑使用两种技术。来实现好。那么这两种技术是什么呢?分别为使用。Map。以及什么呢,使用。VOOK吧,好,例如。
04:00
这么说吧,我把它合并了先啊,以及使用为好,例如。我们现在的这个需求啊,现在的需求好,现在这个需求是查询出学生和班级所有的信息,是这样吗?好得到的这个结果,大家注意啊,得到的结果我们使用什么呢?咱们这个学生,也就是咱们这个domain。或者使用班级这个表面是不是都封装不了查询出来的结果啊。这个没问题吧,这么说吧,还是分开写吧,啊,慢一点啊,学生的倒面。或者什么呢,班级的。怎么样,Student类或者是类啊,都不能够这个啊封装。这些结果为什么呢?因为这些结果包含了所有学生的信息以及班级的信息,是这样吗?所以啊。
05:01
我们可以使用这个啊map。这个保存是这样吗?就保存这些信息OK吧,但是同时呢,好,我们也可以使用VO类来保存这些信息。OK吗?那这个VO表示什么意思啊?VO指的是。好,我们需要创建出来一个类,这个类中的属性啊,属性是完全。由啊,我们自己去定义好。属性会包含所有什么呢?需要展现的信息,好例如我们现在的这个例子,好我们可以使用什么呢?这个VO来干嘛呢?
06:10
干嘛?同学们封装?封装所有好与学生。和班级相关的信息,OK吧,好,那现在很明显啊,我要来一个什么,我要来一个VO类,这个VO类里边要来个什么,是不是来student里边的详细信息以及什么呢?Classroom里边的详细息能理解吧,好,这就是咱们这个VO啊,好,那么我们现在来创建一个VO类啊,单独的给它来一个包结构啊。溜出来一个package,我们来走一个。VO包,好,这个VO包呢,我们来起一个名字啊,这个名字呢,就是我们所有学生和班级的信息,比如说来着student and。
07:10
来个VO好。在这里边我们可以有两种写法,第一种写法是什么?Private student as以及private classroom c,可以吧,但是现在这种形式啊,我们还没学到呢,OK吧,稍微高级那么一点点,其实也很简单,OK吧,好,我们把它简化一些啊,我们常用这种形式是什么呢?把所有的这个属性都写在里面,与我们学生相关,所有的这个属性是什么呢?是不是咱们这四项ID name age和address啊,对不对?好这四项,那与班级相关的呢?啊啊,他也得有ID对吧,死星ID还有一个什么。啊,还得人家还得有一个内幕对不对,好,那上边是学生相关的信息对不对,相关的信息,好,那下边呢,是我们这个。
08:11
班级相关的信息,OK吧,行,但是这个ID和name重名了,这就是咱们这个VO最强大的地方啊,这里边这个属性名啊,你不用跟我们这个数据库表一样,跟数据库表一样啊,字段一样的,我们管它叫什么叫DOMAIN11对应的关系,对不对?现在这里边这个属性的名字完完全全可以由我们自己去定义,OK吧。OK吧,好,所以说啊,我先随意给他起名字,那既然你学生相关的student嘛,我管他叫什么,比如说叫student ID,比如说简查ID可以吧。STEM。SH是什么,这个呢?CAD及c name,好,这个啊,还得有。好,最后咱们来一个for each。
09:03
啊,不是这个to string啊,To string,好,那么我们现在来看一看,这是不是有点类似于我们传统的这个doin,是这样吗?啊,里面也有set get,所有的存取值操作也是用set方法和get方法来实现的,对不对?好呃,那么现在啊,我创建了这个VO之后啊,我们再来看看一看这个需求,诶,就可以避免使用咱们这个map,毕竟使用map相对来讲的话稍微麻烦一些,是这样吗?OK吧,好,那现在我们来看啊。这个21啊,21这个测试啊。啊,现在就到20,这个没问题啊,来个21。啊行,重写吧,这没有什么copy的必要了啊。Student do怎么?
10:01
21好,这个21要给我返回的这个结果是什么?还是先写色扣吧。写完四号之后就知道返回啥了啊SELECT21 result type,我们来看一看啊select啊,查什么,一会再解析啊t BL student s,这个跟上面一样,对吧。Join t BL对不对,On s点。ID等于C点。ID没问题吧,好,那现在咱们要查询出来所有的信息啊,那其中咱们包含学生信息s.ids点。names.h以及s.address是这样吗?那么班级的这个信息呢?CIDC点。
11:10
那是这样吗?好,一个是S,一个是。C。OK吧,但是从从我们上一个案例来看啊,是不是这两项都是重名的。咱们是不是应该起别名啊,好起别名咱们起成什么sad呗,那这个呢内如果按照这个来s age s address,然后这个对吧,Cid这个呢,C name,好返回值呼之欲出谁。VO啊,你是不是用VO1反就行了,就拿它当做以前我们这个doin student类来使用,是不是就行了啊,只不过它得到了一个属性的扩展,是这样吗?扩展了什么呢?咱们这个班级相关的信息是这样吗?这个东西我没有起别名啊,所以说呢,这个咱们一定要这个全路径啊,给它贴过来好,那这里边咱们应该用啥机啊同学们。
12:11
你是啊,该是什么?Student and。VO。21好,这个咱们标号21没问题啊,那现在你要把这个VIVO遍历呢,太简单了,比我们这个map那简单的多了啊,对吧。来VO,咱们来个VO。啊。S out,把咱们这个VO给它输出了。好使吧,啊,没有任何问题啊,没有任何问题,所有的值都有了啊,啊,尤其是扩充了咱们班级相关的信息,是这样吗?好,那么最后一个需求呢,查询出带有字母Z的学生。
13:09
和班级所有的信息,那这怎么查,咱们现在是不是相当于大家注意啊,这这道题这个考点啊,其实挺简单的,但是有一个需要注意的地方,咱们是不是现在得挂载这个where查询条件了,也就是咱们先要查询出这个name里边是不带Z的对不对?好学生名字里边带C的,因为有很多同学习惯于这个单表查,大家注意啊,只要是多表查,咱们说一定要给这个表起别名,是这样吗?那么很多同学就直接就这么写了啊,直接name like这个叫什么。咱们传过来一个什么说内嘛,对不对,好这么写其实不行呢,为什么呢。大家注意啊,既然你为表起了边名,你要指定这个字段,你就必须得是S点内,或者是什么C点内,这个是必须的,OK吧,好,我们这个再单独拿出来一个啊。
14:13
好,咱们最后一个测试啊。嗯,22。啊,咱们还是这个啊。22好,就是在我们最原始的这个基础之上。22。加一个。Where,大家注意,学生表和班级表都有name,你可千万不能写一个裸露的name对不对,S点。Name OK吧,咱们来一个like。
15:00
穿了一个。哎,说没传呢,咱们这带带有字母Z呢,对不对。好。好,这个咱们来一个name吧,行吧。好。那如果同时班级也带这个Z呢?And,应该是什么?就C点内OK吧,好,也就是说我们多表连插之后,大家注意啊,你一定要把什么给加上表的这个前缀给他加上OK吧,这个是很容易忘的啊。行,咱们来执行一下啊。行,这个带有这个字母这个Z的啊,还是这两个人是黄子韬和这个张艺兴,是这样吗?行没有问题啊,那最后咱们来总结一下,那实际项目开发当中啊。
16:04
实际。项目开发中好。如果要为前端。同时提供多个值啊,就是说多组这个啊,多组值好,那么我们应该使用map还是VO呢。从我们以前这个例子来看,是不是用map也行,用VO也行啊。都可以用哪个。用map有map的好处,Map的好处是什么?咱们是不是不用重新建立起一个类啊?那VO也有VO的好处,当你VO创建完之后,你直接用这个VO是便利起来是不非常的方便呢?是这样吗?所以说啊,如果啊,这个啊,这个前端的这个啊,需求啊需求的这个啊重复率不高,好,那么我们选择临时使用什么就行了,Map就可以了,是这样吗?那如果啊前端的。
17:21
前端对于该需求的重复率。较高。那么我们可以啊,创建一个。VO类来使用啊,非常的方便,是这样吗?也就是说啊,我现在要展现的这几种信息啊,需要同时的给前端打回去。OK吧,但是这个需求我用完就用完了,以后就不用了,那么此时你如果创建一个V,能处理不能处理,但是呢,你想一想,你针对于每一个特殊的需求,你都需要创建一个VO类,你想一想将来我们得需要创建多少个VO啊,那会使得我们项目整体的这个体积是不是会非常的庞大呀?
18:08
那以后需求老多了,你需要给前端提供的信息五花八门的,OK吧,你难道要为每一个需求创建一个VIVO吗?那很明显是不可能的,累太多了,OK吧。咱们以后这个项目啊,是不是尽量给他。让它变得什么呢?小巧、灵活、方便,是这样吗?谁也不想让自己的项目的体积那么大,那么笨重,是这样吗?那体积小的好处是什么呢?哎,它这个传输方便,它部署也方便,是这样吧,好,那么如果我这个需求的重复率很高,也就是说你同时给我传递的这。五个词。啊,同时给我传递这五个字,哎,我今天也用,我明天也用,后天也用,我重复率超级高,你每一次都使用map是真的是很烦,很繁琐,OK吧,所以说你创建一个VO,使用起来说很很方便的,OK吧,所以说啊以后啊,啊针对于老师给你分析这种结果啊,选择使用map HBO OK吧,我们这个阶段项目啊会大量的出现这种情况,在前期我会带着你去分析到底是使用map还是VO。
19:14
到后期需要自己去分析,OK吧,啊到后期就简单了啊,我带你分析两天,这东西很简单的,OK吧,好,现在之所以啊,咱们现在啊,你看老师一讲啊,诶概念差不多,但是啊,实际项目开发当中想象不到啊,是这样吗?啊是因为咱们还没有经历过这个实战的啊,这个不着急啊,行了,咱们这个MYT就到这啊呃,那么除此之外啊,我们个MY还有比如说啊,这个对象套套对象的这种多表啊,使用的是这个association和collection啊collection啊还有一个挺重要的功能叫做逆向工程啊,这两项这个ma这个高级特性啊,我们留在。呃,应该是第六阶段啊,给大家讲OK吧好啊,对于这个MYT的这个基本使用啊,就这些OK吧好,你看似不难,但是在用的时候你得能想得起来啊,具体选择使用哪一个属性,哪种用法OK吧好。
20:13
行。
我来说两句