00:00
前面呢,我们对照着这个页面封装了我们页面要返回的详情数据模型,来,这个模型里边呢,没有封装页面里边所有的详情内容,比如多少人预约,来自哪个旗舰店,当前squ是什么,它下边下属的SQ是什么,这些东西我都没有加,包括它的优惠,如果大家想加这些功能呢,来继续编写就行了,那现在就来做这么几个,首先第一个查询SQ的基本信息,它呢是从SQ英fo这张表里边查的,那么这个当前service呢就能完成,比如我们之前有一个方法叫get SKU,诶我们这直接有一个GET8ID,相当按照我们这个SQID查出sqfo实体类,好,我们现在呢就想用这个,那我们先就查到了我们当前SQ的基本信息,然后接下来我们来继续,如果有基本信息了,那我们就可以给这个VO里边设置好基本信息set info。
01:00
那么这个基本信息呢,就有东西了,然后呢,还是SQ的图片信息,那这个图片信息呢,肯定就要用图片的service来注入SQ image图片的这个service来看图片的service里边我们以前有没有写过,我们能按照SQID获取当前SQ的所有图片来点一个get,我们呢,之前没有写过这些方法,比如呢,我们就可以写一个get images把我们这个SQID,我们想按照SQ的ID获取当前SQ对应哪些图片,那最终呢,返回一个list类型的这个SKU的所有图片信息,Images好,这个实体类,那我们把这个呢就叫image,那我们这个图片呢,就找到了,我们希望调这个方法,那我们把这个方法呢创建出来,来添加上它的实现,在这来添加上实现。
02:00
在这实现呢,我们利用我们自己的这个do,好,我们自己呢也有一个方法,首先this点它自己的base member,那就是能查我们这个SKU图片的这个duo,好,然后呢,我们接下来从它里边我们来想要查SKU的所有图片,我们来看一下数据库。在SKU图片表里边,只要按照SQID来查就行了,所以我们就应该来写一个查询image do点调用我们的select list方法们要查一个集合来写一个corry vaper,我们要进行查询,查的是这个试题类,然后呢,Waper的条件是什么?那么就应该是E口,E口我们数据库里边有指定SQID,那就是这个等于我们指定的值就行了,好,我们按照它来查,最终给我们查出一个所有图片集合,把这个集合返回过去,那么SQ图片查询我们就做好了。然后呢,接下来还有我们的s puu销售属性的组合,这个呢比较麻烦,我先来放在这儿,我们先来查最简单的PU的介绍,这个介绍呢,那主要就是在这英o describe是这张表,这张表呢,我们所有的介绍,相当于是拿到他的这些介绍图片。
03:23
二在这儿,在这挨个展示就行了,所以我们只需要来查这张表,把我们所有的图片拿到就行了。好,SPU的介绍,那关键呢,这是s puu的介绍,SPU的介绍呢,我们之前查了S的详细信息,这个详细信息里边我们先得得到SPUID,那们当前PU属于哪个puu,得到这个puu ID,然后呢,再按照PUID查出puu的介绍,那前一步的图片查好了,我们就来设置进去SQ item vo.set我们的images将所有的图片也来放进去,然后呢,我们puu的介绍,好,那我们就来查一下puu介绍呢,肯定要注入puu介绍的service,就puu info describe的service,好,那么就希望拿到这个介绍的service,那这个呢,主要是按照po ID查,那我们的这个service里边主。
04:23
键就是po ID,那么就按照它来查就行了,好,我们在下边来找一下po符,点一个我们有一个GET8ID,直接按照主键来进行查询,主键就是这个po ID,查出pou的描述信息,这是我们pou的描述们就叫po英O,那这个s pou英fo查到了以后,我们就给SK item这个VO里边来保存好描述信息,诶我们就查到了。那接下来呢,就是我们这两个比较复杂的方法,一个是来获取SPU的规格参数信息,一个是获取SPU的所有销售属性组合好。
05:05
我们先来看一下我们这个规格参数信息该怎么获取,那规格参数呢,其实就是这一块点一个,我们要set一个set一个什么,我这有一个属性分组带的这些属性,相当于我们要set一个这个几何,那如果我们所有的这个参数的service能帮我们来查出这个就好了,比如我们拿到at tr group的service at tr group service,我们希望这个service呢,能有一个查出我们某个SPU的所有属性分组,以及这个分组里边所有属性对应的值,那就好了,我们就希望呢有这么一个方法,这个方法呢,我们以前是能按照三级分类ID获取,但是我们现在呢,是按照我们PU的ID get at tr group with at trs8,我们以前呢是三级分类ID,现在我们是按照PUID,相当于我获取当前。
06:06
商品的所有属性分组以及它的属性值,那好,我们希望把当前商品的po ID往进一传,然后呢,最终给我们得到我们想要的这个集合,CTRLC,我来复制过来得到它。走,那么就叫at tr group Vs,那得到它以后呢,我们直接在这来返回就行了,我们希望有这么一个方法,那么就来创建出这个方法,好,我们来创建出它的实线,走我们创建出它的实线,然后呢,我们在这来查。现在呢,我们这个方法的作用就是查出当前SPU对应的对应的所有属性的分组信息信息以及。当前分组下的所有属性对应的值,那相当于是查这个po对应的这些值的,那对应的这些值呢,我们先来分析一下我们的整个流程。
07:14
我们来到数据库,我们来参照一下这张表,表里边呢,我们商品的属性值在这张表里边PMS,比如我们13号PU,它呢有这么多属性,对应的值是这个,但是我们你要取出它的同时,还要取出它有多少个分组,所以我们想要做的第一步得知道当前PU,当前PU。当前PU,然后呢,有多少有多少对应的属性分组,那我怎么知道它有多少的属性分组,我们现在呢,相当只知道它的属性,那我们想要知道它的属性分组,在这一块有我们呢属性分组呀,它是关联了我们三级分类的ID,所以如果我们知道当前PU属于哪个分类,我们就知道它有哪些分组好。
08:07
正好我们返回的这个数据,我们来对照一下我们返回的这个数据呢,他要这个信息分组的名。来看它要分组的名和每一个组下边对应的属性名和属性值,属性名和属性值,那好,我们就先来查出所有的分组,所有的分组呢?我们既然知道s puu了,那肯定知道s puu所属哪个分类,在这一块保存了s puu的分类,当然这个s puu分类呢,我们可以查,我让前边传过来也是没什么问题的,来点这个方法们来看,在调用的时候呢,你都能知道s puu的信息,那这个puu的英符你这已经查出来了,你可以从这个英F里边再来获取到我们这个三级分类的信息,我发现这个英F里边呢,没有三级分类,只有我们这个squ英法,那么看SQ里边有没有保存它属于哪个三级分类,诶发现呢,这有保存了,它属于哪个三级分类,那么相当于呢,只要查出了第一步,我们就知道了它的三级分类的ID,以及知道了我们SPU的ID,知道这两个ID以后呢,我们接下来传给下边就可以确定很多东西。
09:23
我们把这个音呢保存在这,好,我们来传给下边,我们不仅传一个po ID,我们再来传一个三级分类ID,我们来改变一下我们整个方法的签名,添加上我们第二个参数走。我们来改变我们这个方法,好,我们来看一下我们现在这个方法呢,我们添加了第二个参数是传了我们这个三级分类ID,相当于呢,我们现在要运行查询,我们知道三级分类是多少,那我们能不能查出分组呢?好,我们先来查我们有多少的分组,我们先来查这个组名的信息,我们分组呢,里边直接包含了我们是哪个三级分类,所以我想要看组名来写一个这样的circle select行from我们这张at tr group这张表,Where,我们的查询条件呢,那就是我们因为前边我们会传三级分类的ID,按照三级分类ID查,比如现在是手机类,就是225,我们来看这个225下有多少的分组,走诶我们发现呢,它有三个分组,然后这个分组下,我们再来看有多少的属性,我们可以来写一个联合查询,好,那我们就给这张表起一个别名,我们就叫AG,好,这张表我们也不查AG表的,所有了我就查AG表的。
10:37
我们要组名,那就查组名,好,我们来查它where啊,我们说的这个东西是什么?走,我发现呢,有三个组,那么现在还想看每一个组里边有哪些属性,因为我们知道每一个组,肯定也知道组的ID,比如我们来可以看一下AG里边组的ID是什么,我们只要知道我们当前分组的ID,我们肯定知道单元分组下有多少属性,有多少属性呢,是在分组跟属性的关联表里边来打开,它里边呢,每一个分组ID关联了什么属性我们都有,所以呢,我们想要查它有哪些属性,我们就应该left join left join,我们这张表我们叫at tr group的关系表,我们就叫aar这张表,那么join的条件是什么?那就应该是我们这张分组表对应的分组ID就是这个分组ID,那么就能查出这个at tr信息了,所我们join的条件就是我这个aar表里。
11:37
边的分组ID,那就是我们AG表的这个分组ID,相当于我们查出这个组里边,那我们想要查出它的属性,但是我们呢,现在能查出属性的ID了,你们在aarr表里边有属性ID,我们可以给大家看一下,我们除了查这个分组ID,我们再给大家多加一个属性ID aarr表的属性ID我们能看到当前分组有哪些属性走好,相当于主体组有一号属性,我们基本信息组二号属性,哎,不对,这是我们这个分组的ID,那相当于一号主体组,它的组的ID是一,它有七八两个属性,而二号呢有11 13 14,我们这个七号组呢,有实物16,属性ID找到了,但我们想要属性名,属性名呢在属性表里边又封装着,所以呢,我们又得left join来记去,点left join,我们的属性名,我们PM satr表我们就叫。
12:37
At tr照应的条件是什么?那at tr表里边儿我们有属性ID,那就等于我们刚查出来的这个属性ID,所以我们来连上它的关联表里边的属性ID,那么这个关联表,关联表里边呢,每一个组关联哪个属性,我们相当于这个关联条件也有,那我们现在呢,就相当能查出组名了,想要获取组名,就从我们这个at tr里边来获取第二一个at tr name,那么这个是属性名。
13:09
那么这个属性名呢就得到了,但是呢,它这提示有问题,问题的原因是这个catlo ID,对这个ID呢,是属于我们AG表里边的这个好我们来运行一下。走,那现在呢,相当于我们这个主体组有两个属性,分别叫入网型号,上市年份,基本信息,有两个属性是这个,然后主芯片是这个,但是呢,我们要看这个属性的值是什么,这个值不是at tr表里边封装的这个值,这个值呢是可选列表,而这个值呢,是我们这个商品表里边对应的商品真正的这个值。所以呢,我们再来连上一张表,如我们来选连接查询,就是这样left join再来连上商品表进行查,我们给商品表呢起一个就叫PV,这个好,我们就叫on on的条件是什么?P AV表里边呢,有at tr,那这个属性ID都知道了,那相当于属性ID进行联合,At tr就等于我们这个关联表里边at tr表我们刚才都查到所有的属性了的at t rid,但是我们的查询条件,查询条件呢,除了按照分组,还要按照SPU来。
14:22
查,所以呢,这个分类带上我们PU的ID,我们现在相当于p AV表里边点一个PUID,假设我们来查13号商品,走我们把商品呢跟它分类都传过来,我们现在能看到我们这样我们查出来这个东西,因为我们要看属性值,属性值呢肯定要从我们最后连的这张表里边提取点一个,我们就叫at tr y6,好,我们来看一下我们最终的效果,走那们看来的效果就是这个主体组对应的入网型号是这个,它对应的值是多,这个当然是哪个商品,你想看是哪个商品呢?那在最前边给大家展示一下是哪个商品,我们就叫AG表,不是AG,是p AV表,Product at tr value,这张表里边有没有封装我们商品的ID,好,我们就直接PUID来拿上来看一下是哪个商品,Ctrl a走,那最终要结果就是这样,13号商品它。
15:22
就三个组,然后呢,每一组属性是这样,它对应的值呢就是这样,那这就是我们如果写联合查询,那我们就查出了这么一个效果,好,那我们最终我们也来写上一次联合查询,我们以前都没写过联合查询,我们都是做分布,那如果要做分布呢,那就更简单了,一个查出来再来查一个,只是比较耗时而已,那么来看一下我们的这个效果,那么就希望这个东西呢,它调用的SQL语句,我们直接拿到at tr,我们拿到它的这个DAO this.get base member,我们拿到它的这个DAO,我们DAO里边呢,就自定义出我们这个方法,这个方法呢,我们就来自定义circle,就是我们指定的base map。第二我们现在呢,我们现在呢有一个这样的自定义方法。
16:12
好,传入PU的ID,然后呢,再来传入三级分类的ID,我们就查出当前PU到底有哪些属性,那最终要返回什么,我们希望就返回的是这个样子的东西。走,我们就叫VOS,我们把这个vos呢最终返回,那好,然后呢,我们来创建出它,那创建出它以后呢,我们就来写它的这个实线,大家来写它实线之前,我们在插麦中得定义出它,好我们先来生成我们的这个插里边的这个statement,这是一个查询的statement,好我们生成放在这,然后呢,在生成它的时候再来,注意我们一定要给这两个,我们来添加上我们的PAR,因为我们有两个参数,我们让它生成PAR,这样我们获取每一个参数就简单多了,再点进来,那我们的SQL语句,它的这个result type在这呢,它定位不过来,我们这是一个可公共访问的这个内部类对象,这样没啥问题,然后我们接下来我们把这个circle语句,我来复制过来,Ctrl a ctrl c来CTRLV。
17:24
MYSQL语句呢就长成这样,但是呢,这样大家来注意,如果我们是这样,我们查出来的信息很多,但是呢,我们的这个VO,由于我们是一个集合,集合里边这个VO呢,只有三个属性,这三个属性呢,就是我们说的group name,还有我们的at tr name,还有at TL value6那想要封装成功,那么就来给每一个起上别名,比如它的别名就叫group name。At tr name,我们这at t r name,它的别名就叫at t r name,这个at t ry6,它的别名呢,我们就叫at t ry6,那我们都起上别名,以后我们只要有这三列对应的值走。
18:08
我们看到at tr name at tr value6和group name,我们有对应的值就行了,然后它就能自动封装成功了,给我们result type返回的是集合里边元素的类型,Result type返回返回集合里边元素啊类型,那我们来看一下效果,我先来做一个测试,现在这个是肯定不行的,因为我来直接写result type有问题,我们这个viewvo比较复杂,Viewvo里边group name能直接封装,但是它里边的这些属性ATS的at tr name at tr value6又是一个对象。所以呢,我们如果不测试之前,我们想要给他正确封装,我们必须抽取自定义结果集,那我就来不测试了,我们就不走那个弯路了,我们直接来抽取result map自定义结果集,自定义结果集指定我们封装的类型,我们封装为它,然后呢,我们这个result map的这个结果类型,那么就将PU item的这个VO。
19:11
好,那么最后呢,在这来指定我们最后封装的时候,使用我们指定的这个结果集。我们指定的结果集里边呢,来指定哈,挨个数据,首先result,那result我们property,因为我们查出来我们数据库里边会返回这么多,如果我们不起别名的话,起别名呢,能正确返回,但不起别名,那我们现在就是这样子不起别名,每一个呢,数据库的列名这都有,那我们想要封装正确,那我们就要挑出对应的列,好我们就来挑出对应的列,那对应的列呢,我们就只来挑这几个,首先at tr group,也就是说我们数据库里边这一列at tr group name对应的这一列,在我们这个里边对应哪个Java对应的属性就是我们这个group name对应这个属性。
20:03
那我们group name就有的封装了,但是呢,发现这个VO里边呢,它at ts是一个集合,所以我们在这呢得声明集合使用collections,我们来声明那ADTS这个属性,它是一个集合,那集合里边有一个叫off type,我们就来写一个off type off type的意思就是我们集合里边元素的类型是什么。我们来看这个VO里边集合里边元素的类型是它,我们就把它的全类名复制一下,Copy reference,好元素的类型是它,然后呢,我们再来封装这个元素里边每一个属性该怎么办?Result,首先我们数据库里边查出的这一列,我们有一列呢叫at tr name,就是它at t name就封装给我们这个里边的at TL name,然后呢,继续result column column,我们查出来的这个at t ry6就封装给我们这个集合里边的at t ry6,这都是马贝蒂斯的自定义结果集封装,我们只有指定了自定义结果集了,它才能封装我们这些嵌套属性,只要有嵌套属性,一定要封装自定义结果集,我在这来注意一下,只要有嵌套属性就要封装自定义结果机,我们指定好它自定义如何封装。
21:28
结果它呢就能给我们正确封装,当然三级分类的ID我们取出来,井号大括号我们呢,会传入一个分类ids po ID我们也取出来,井号大括号我们会传入一个po ID,我们来先来做一个单元测试,走,我们在这来测试一下。我们在这来写一个public static。哎,我们写一个word,那这个test。来标上an test注解,好,那现在想要测试这个呢,我们就把这个的do注入过来,我们叫at tr group de直接注入过来,At tr group do at t group do,这个do里边呢,有我们刚才写的这个方法,好把这个方法拿到叫它传入po的ID,这个po ID呢,我们就来对照看一下,那么这个商品,那么现在商品呢,有13号商品。
22:24
来直接来看我们13号商品属于哪个分类,我们就来查13号商品,13号商品它是属于225,这是我们这个手机分类的,好我们就来查它,我们看能不能拿到我们想要用的数据。好,最终返回一个这个,那我们就来this out们来把这个呢一打印就行了,那要打印的比较好看,我们就来给它生成一个to string方法,让他们呢自动来生成to string方法,每一个呢都一样,我们这里边要封装的这个at tr也来生成to string方法,好我们来测试一下,走们来看这个封装效果好,那这块呢,测试完成,我们发现呢,这有一个报错,报错的原因我们来看一下,它创建不了B一直看,最后我们这个最后不能创建circle session factory,不能创建的原因就是我们在这个解析我们这个at tr do的时候,有一个内部异常,这个异常是什么呢?我们一直往下翻。
23:25
说我们这个不能解析我们的这个class class呢就是我们po item at tr VO,也就说我们写的内部的这个public东西,它呢不能使用,那么就把它来来提取到外边,好先来提取第一个。把这个呢,提取到外边,这是我们的第一个,我们来到我们的这里边儿,把两个属性呢,我们来拷贝过来。Clc来放到这。我来写一个at data和to string来加上at to string,然后呢,接下来第二个,那么这个内部端呢,它也不能解析,那么就来继续封装,那么这个已经提取到外边了。
24:07
好,我把这个去掉,那这个只要一去掉,我们这一块引用呢,就会有问题。我们把这个引用呢,重新来导一下,诶这个已经倒过来了,都在同包下,就不用导了,然后呢,这个best at tr为这个我们也不能要了,要不然也提取不到,那best at tr VO我们来到这,这个既然没有了,我们用什么呢?我们来看以前我们提取过一个at tr,诶属性名值都是一样的,我们就来用它,好我们来到这一块,那么这个VO里边呢,最终来使用list类型的这个at t。相当于这是我们的分组,这是我们组里边所有的属性,属性有名跟值好,我们SQ的这个VO里边,我们这个分组信息呢,就提取出来了,那销售属性呢也一个样,好,那我们为了以后方便,我们就直接先来提取出来。那提取出来,我们把这一块里边的两个属性CTRLC,我来复制过来。
25:04
来data来一定加上get set方法,我们把这一块的就来删掉,这个一删掉呢,那我们的销售属性分组也都能引用成功了,同时我们来修改我们的这个插面,这个插面呢,所有的这些就不能引用了。我们相当于不是写它的这个内部类了,我们直接把它一删就行了,把这个一删就行了,都在我们这个VO包下,我们呢没有了这个base at tr VO,我们现在呢叫at tr,就是这个好,我们让它能封装以后,我们再来做一个测试,还是来到我们这个测试方法,我们最终返回的呢,是我们这个叫PU PU item at tr VO返回的是它,当然我们这个方法签名呢,也都改一下,不要用到这个内部类的。好,我们把这个呢引入进来。包括我们来打开它的实线,我们来到service的实线at tr group,好,那么这一块实线呢,就不用这个内部类来进行封装了,我们来导入我要用的这个类,那么这块呢,就整个封装成功,他说这一块有问题,原来呢是跟接口的这个类型不一样,那我们把这个拿过来,把它的接口在这来变一下,我们在这儿接口声明的时候,好,我们的返回类型来变一下。
26:21
走好,我们现在呢,不用这个内部类的方式,我们现在来做一个测试,我们来到我们的单元测试,好,我们现在来测试一下他我们的整个结果能不能封装成功,我们相当于现在要查我们13号商品是225分类的,我们说这个employment里边找不到符号,那我们就来employment里边,好这一块封装呢,我们给它删掉。在这一块封装也是一样,给它删掉。来重新测试,以前所有的引用呢,都给它,给它改成非内部类的方式,好我们发现呢,这运行成功能不能查出这个主体组,主体组里边呢,有很多属性,因为我们没返回属性ID,所以不封装,有入网型号,它的值是什么,然后呢,上市年份值是什么,然后第二个组基本信息,它的这个属性是什么,值是什么,属性什么值什么我们都有,相当于我们查出了这个信息,那如果我们来查一个没有的呢,在这来单元测试,那现在呢,有一个13号商品,如果我查一个100号商品,我们肯定没有这个商品来做一个测试,好我们发现呢,它这一块正确的返回空集合,那就没什么问题了。
27:31
这就是我们的这一块功能,我们来到艾m controlr了,我们现在已经封装了很多了,那么这个呢,就封装好了参数。规格我们就获取到了,那下一节课我们再来获取所有的销售属性组合。
我来说两句