00:01
接下来我们再来看发布商品的整个流程来点发布商品这一块呢,只要不报错,那么就可以来录商品的名称,但这个名称呢,是PU的名字,那就应该录华为MATE30PRO,我们把这个录过来,包括商品的描述放在这儿选择分类,比如我们来选中了一个分类,那接下来呢,我们又得有一个接口,这个接口呢,现在是404,它的这个作用是什么呢?我们来可以看一下,它是获取商品下的。分类与品牌关联关系来获取到当前分类关联的所有品牌的来,这个接口呢,我们还是参照我们接口文档来到商品系统,我们可以获取到当前分类关联的所有品牌,我们第14个获取分类关联的所有品牌,那就是它,我们再来编写这个接口,我就可以将第一个界面调通了,来到我们的product里边。好,那在这呢。找到我们这个接口。
01:00
现在我们发的请求是product category brand relation,那么就来到分类与品牌的关联,这个controller category brand relation,我们现在呢,有一个请求是这样来写在这,他来获取这个下边的所有的品牌,好,就来public啊。就叫relation brands list。我们关联的所有品牌,那发送的请求我们还是get map。这个mapping呢,要处理的路径,前面的这个前置路径就不用写了,把后边加上。我们来看请求,有没有什么请求参数。在这呢,有一个请求参数,它参数名叫cant ID,那这个参数不是路径变量,那我们就应该这样获取,使用request注解获取请求参数中的这个参数count ID,好,我们就叫count ID。但这个参数呢,是必须存在的,那我们就可以这么来写,首先Y6是它,然后呢块等于true,那这就是必须传递的,那如果没传递呢,我们也可以给一个default value,零等等,当然没传递我们就不应该给他查数据。好,我们来到这。
02:17
传了一个三级分类的ID,然后呢,查到这个分类下关联的所有品牌,那最终返回呢,就是品牌的ID和品牌的名字就行了,我们就希望有一个category brand service能帮我们来做这个事情。第二一个get brands。我们就叫brands,把我们的cat ID,我将我们三级分类的ID传递过来。包括我们来看一下这块呢,也不是一个分页返回的数据,所以我们就来直接返回整个list,而我们现在只要品牌的ID和品牌的名字,那这个呢,我们就可以单独来编写我们这一个VO,我们将品牌有用的信信息给他返回,比如我们就叫brand VO。
03:04
回家。那这个VO里边呢,现在就有两个属性,一个是品牌的ID和品牌的名字,凡是要返给前端页面这些数据呢,不是我们NDT里边的全量数据,我们都可以给他封装VO,那第一个是private long类型的品牌ID。还有private long类型、string类型的品牌名字。包括我们要填上它的get set方法,直接使用long bank的注解at data,那我们最终就希望这个service帮我们能返回这个数据,我们就来写一个list,当然service呢,我们后来啊,也不推荐直接返回VO,如果service查出的是完整的品牌,别人可能还要用这个功能,人家可能要用完整的整个品牌实体类的相关信息,比如在这儿不止要ID,可能还要logo等其他信息,所以我们还是让service先查出我们这个品牌的entity brand实体类,那最终呢,我们的在controller里边给它封装我们想要用的VO vos.stream.map。
04:18
我们来封装每一个数据,变成我们自己想要的,我们来拗一个brand VO brand。这个VIVO里边的所有数据呢,都是来源于brand entity,有品牌的ID和品牌的名字。当然这个名字呢,已经不叫brand name了,所以我们现在就不能进行属性对拷了,那么就来一个一个自己设置brand vo.set brand ID,那就是item.get它的ID包括呢品牌的名字,点set它的名字,那就是item里边的get name。
05:01
由于这个name呢,跟这个brand name属性不一样,那就不能对抗来return,把这个最终返回,然后收集成一个几何给前端页面返回collect.to list to list,好,那将这个最终收集来的数据呢,使用R返回出去,Return r.OK。Put,一个我们成功返回,我们就来写一个data data里边的数据,那就是它,所以最终啊,我们给大家给上一个套路,什么套路呢?最终我们希望controller就只是来接收请求和处理页面提交来的这些数据。把数据封装成业务想要的,或者对数据可以做一些前置校验。controller指来处理请求,然后接收接收和校验数据,那最终所有的东西我都希望调用service直接来完成。所以接下来我们第二步,Service来接收controller,接收controller传来的数据进行业务处理。
06:10
最后呢,我们controller又来接收service,接收service。处理完的数据封装成。页面指定的VO,指定的VO。所以我们最终啊,希望CTRL最好只有三句话,第一句话那就是请求接收来,如果我们这些数据复杂了,还要做一些其他校验,那就第一句话的功能,那就是数据校验,我们在这呢可以使用GSR303做完,那第二句话就应该是调用service业务逻辑,那第三句话就是处理返回业务逻辑,给我们返回一个对象,我们封装成我们自己要用的页面的数据。最终把这个返回给页面,这才是一个非常清晰的分层,我们希望ctrler就这三句话,接收处理数据,交给service,再处理service来的数据进行返回,那好,我们service呢,就缺这么一个方法,我们把这个方法呢创建出来,好,这个方法就是帮我们。
07:17
查询指定分类里边的所有品牌信息,那这个信息呢,我们就可以来到品牌表里边,比如我们的PMS品牌表里,打开每一个品牌呢,它都有它关联的三级分类,当然这些分类呢,全部在品牌与分类的关联表里边,这里边呢直接封装了品牌的ID。和品牌的名字,所以我们只需要查这个关联表就行了,那我们就来到这个service里边,用关联表的这个do,那就是category category brand relation DA,我们把这个关联表的do拿过来,或者调用它的this best member,那就是这个do,那么拿到这个do呢,直接点一个,那是select list,我们要查出一个集合,但集合查询的。
08:07
条件是new,一个就叫corry bar。那最终想要查出category brand relation entity这个集合,那么查询条件呢?我们来写上第一口是按照三级分类的ID过来,三级分类的ID catalog ID是我们传过来指定的值走。给一个count ID,那最终呢,他会帮我们来查出这么一个集合,但这个集合直接封装了品牌的ID等等这些信息,那么就可以将它直接返回,把这个方法签名重新改一下,但我们为了能重用,期间由于别人可能会调用这个方法来获取到品牌的详细信息,所以我们应该再次将每一个品牌的详细信息也都同时获取过来,Stream点一个。Map来写一个item。箭头函数哈。
09:01
然后呢,我们将每一个的详细信息,item.get brand ID,这是品牌的ID,我们可以拿到品牌的详情,那品牌我们就调用品牌的service,我们一般调用别的业务逻辑,就直接注入别的业务逻辑的service,虽然可以直接注入品牌的DAO,但是如果我们是注入的是service的话,那service就能有更丰富的业务逻辑了,那do,这都是map自动生成的,我们想要给他后来再添加一些内部的业务逻辑就不好填了,所以我们来注入service,好,我们来整一个O。我们在brand service里边,我们来查询出相关的品牌信息,点一个SELECT8ID,们这有一个叫GET8ID,这个GET8ID按照品牌的ID直接查到品牌的详情,然后将品牌的详情返回成一个集合,我们后边要用好,我们把这个封装返回,点一个collect to list,当然我们不管怎么做分布查询,我们都在这不进行连表查询,好我们把这个collect collect在这返回,那我们这个功能就写好了,获取某个分类下关联的所有品牌信息,最终封装成这个VI返回给页面数据,那么可以来重新启动我们商品服务重新启动。
10:30
我们再来调试一下,来到我们这儿,好,先把这个关掉,我们点击发布商品,商品名称这些呢,好我们先不说了,主要是我来在这儿选择分类的时候,当我们来选中一个分类,它会查出这个分类下关联的所有品牌,我来点击,那下边呢就会来发请求查询这个分类关联的品牌查询到了,我们就在这儿可以来选中他们。我来选中华为,那下一步的时候呢,就可以录入相关的数据了,但这些数据呢,还得继续来编写,我们其他的接口,我先将第一屏的数据我先调通。
我来说两句