00:00
我们再来编写分组与属性关联的功能。首先每一个属性分组都可以关联非常多的规格参数,也就是我们的基本属性,那么就需要在这对它进行操作。首先第一个接口,那么来点击关联,我们会列出当前分组关联的所有属性,它会发送一个请求,Product a tr group,带上我们当前的分组ID,获取到它所有关联的a tr,那参照接口文档,我们将会发送这个请求,最终响应的数据就是我们当前分组里边关联到的所有属性列表。好,我们先来编写这个功能,At tr group里边,那么就来找at tr group controller。我们现在要写一个叫at tr group at tr relation的这个功能来写public r,我们现在要获取所有分组跟属性的关联,那这个方法呢,它没有什么请求参数,我们接口文档里边也没写请求参数,而我们只传了一个路径变量,就是我们分组ID啊,这是一个get请求,那么get map前面呢就不用写了,我们把后边复制过来,主要在这儿,路径变量我们要获取到当前分组的ID了。
01:18
把分组的ID拿来,这作为路径变量,我们获取过来好。接下来我们就希望有一个方法,由于我们要查属性,所以我们希望注入at tr service,我们把at tr service拿过来,我们在这一个autowaar,我们用它的这个service呢,希望有一个方法叫get relation at tr,它可以帮我们获取到当前分组关联的所有属性,那么就写了一个list,而且这个属性呢,我们来看页面,在这一块展示只展示个属性名和可选值,所以我们不需要写单独的VO,我们直接用它的实体类也可以去来做好,我们就在这直接list返回at tr nt。
02:09
那最终呢?我们将这个数据return r.OK。点put,我们来将数据放进去,要放一个什么呢?我们这叫data data里边的数据,Data里边那就是整个这个实体类。我们创建出这个方法。这个方法的作用,那就是根据分组ID找到这个组内关联的所有属性添加实现根据分组ID。查找关联的所有属性,而且这些都是基本属性,也就是我们的规格参数好,那么想要找它,其实只需要在中间表里边按照分组ID找到所有的at t ID,再去at tr表里边进行查询,那么还是来写分布查询。我们首先。
03:04
使用relation DAo.select list,我们要查到多个查询条件,就是new corryer,我们去中间表at t RA at tr的relation entity,它的查询条件,那就是E口,按照我们分组的ID。我们会传入一个分组的ID。找到我们所有的属性关联,最终返回所有关联的信息,我们把这个选中,那在这里边呢,我们主要要用它的这个属性ID,所以我们可以重新把所有的属性ID收集过来,stream.map,我们写箭头函数,当前的这个at tr,我们主要拿到at tr.get at t rad,我们将这个ad直接一返回。最终把这个ID收集成一个集合to list。那我们最终呢,就会返回一个浪类型的at tr ID的集合,那通过这个集合我们要查出所有当前属性,那么就用at t service this点有一个list,就是查找所有,正好呢,这有一个叫list,把ids按照属性的ID集合查出所有的属性信息,好,我们将这个属性集合放到这儿,好,我们来返回所有的属性信息,最终将它返回,我们将它转换过来。
04:29
那这个方法我们就写好了,可以测试一下,我们先来启动。我们在这儿呢,点击。这个关联我们重新查询一下,点击。那这块呢,就查出了我们当前分组关联的所有属性,包括我们来点击移除,那他也会呢,发送新的请求来将这个关联关系来移除,那正好呢,我们来编写一个移除功能,参照接口文档下边有一个删除属性与分组的关联关系,当然点击移除会发送at tr relation delete请求。
05:03
而且会将要移除的属性ID和属性分组的ID构造成我们整个对象的数组发送给我们。好,我们来编写这个功能,来到at tr controller,现在我们需要有一个删除。Public啊,我们就叫delete relation,那现在这个删除呢,它会为我们提交一个自定义的数据,主要呢,包含at TD和at tr group ID,那么就可以来写一个VO专门来接收它,我们就叫at t r group relation VO。那这个VO里边呢,主要来收集我们的属性的ID和属性分组的ID,把这两个呢复制过来。首先,Private long类型的属性ID at t ID和private long类型的at t group ID data,我们来标注一下。
06:04
那页面呢,会为我们提交这个对象的数组,所以我们在这来编写controller的时候,我们可以说我们会收页面提交来的at tr group relation VO,但是呢,它是一个数组类型,或者我们直接写list都是可以封装的,我们就叫vos,那么最终要删除这些数据,我们就使用at tr service,那就叫delete relation,那将这个vos呢传递给我们,我们将它传递过来。最终删除完成,我们给他return r.OK。我添加上这个删除方法。来添加上它的实现。那删除我们是调用relation do,我们删除关联关系,实际上属性是不删除的,只删除关联关系,点一个delete,我们在删除的时候呢,还可以传入删除条件,那么就可以new一个corry upper,那我们这个条件呢,那就是点E口,按照我们的属性ID和分组ID等于指定的值进行删除属性ID。
07:13
以及分组ID,好,我们先写在这,以及点E口分组ID。分组ID在这。比如我们来写在这儿,但是我们要进行这种删除的话,我们这是一个集合,如果我们选中了批量删除,提交了很多数据,那它就会发送很多次删除请求,所以我们希望只发一次删除请求,完成一个批量删除。那这个批量删除的语句呢,我们可以在这来模拟一下,那就应该是delete。From我们这张表中间表条件呢,就是where。At t tr ID等于指定的值,并且我们at t group。
08:06
也等于我们指定的值,把这个复制过来,Group ID也等于我们指定的值,而且呢。我们不止要删除一条,如果我们要删除多条,我们这个语句还可以这么来写,我们加一个小括号。满足这种条件要删除或者那继续满足,继续满足at tr group ID等于二。比如我们这个group ID等于二,属性ID等于三,那如果有非常多个集合,我们就可以一直给它O下去,所以呢,我们可以编写一个自定义的方法,这个方法呢,我们就叫relation relation。Do点一个delete bench relation,我们批量删除这些关联关系,而这些批量删除呢,我们也希望relation do里边传的是at t RA tr group group relation这个实体类,所以我们在这儿稍加处理一下,我们将页面收集来的这个vos,我们可以先给它转成一个list a点安list vos,然后呢,我们调用它的stream,我们重新给它封装。
09:21
好,我们来写上箭头函数。这是我们每一个item,每一个item都是这个relation view,我们最终呢,将它封装成整个。At tr relation的集合,我们就拗一个at t RA at tr relation entity,我们来进行属性对拷与这里边呢也有at tri ID和at t group ID,所以我们将页面收集来的这个数据b YouTube copy properties,将当前正在遍历的这个item里边的属性值对应复制到relation entity里边,最终我们把当前的relation entity进行返回,把返回的这个relation ENT来收集成一个集合。第2CLICK to list。
10:10
我们把这个集合呢,最终传给我们的整个删除条件。好,那么这个删除方法传递过来,来创建出这个删除方法。那这个删除方法呢,它就要关联我们的map文件里边的一个方法,那我们在这让它生成这个方法,这可以生成一个new statement,它帮我们来生成这个方法,而这个方法在生成的时候呢,大家一定注意,我们推荐大家给这个参数一定是用at PAR来标注一个自定义的属性。我们就叫ntities,那在我们的这个方法里边,我们相当于来发送我们这个删除语句CTRLC来复制过来,但是在这个删除语句中,这些条件都是遍历得到的,所以我在这where的时候来写上my be for each,遍历标签collection,我们要遍历的集合,那就是这个方法的entities,好,再点过来。
11:08
我们要遍历这个集合。集合里边每一个元素我们可以成为item,我先放在这,那每便利出一个元素,相当于就要生成这么一串内容,包括我们来加上它的整个小括号。而这里边的一,那我们就应该取出井号,大括号是当前item里边。的at t ID,包括group ID,那就是当前正在便利的元素里边的group id.at tr group ID。我们每次遍历都会生成这么一个查询条件,但查询条件跟查询条件之间是要用or进行关联的,所以我们在这儿来再来指定一个叫seator我们的分割符,我们使用or进行分割。
12:03
而且呢,我们一定加上前后空格,那这个方法呢,我们就编写好了,来看引用它的,我们在service里边会引用这个方法进行批量删除,我们重新启动来进行测试。我们先来刷新我们的这个页面,刷新。我们从头来演示一遍。现在我来点击关联,先会查出当前分组关联的所有属性,包括network里边我们也可以看到当前一号分组关联的所有属性,我们现在查查出来了,那我想要移除,点击移除我们就会发送delete请求,但这个请求呢,现在是404 404的原因来点进来,由于我们这个controller刚写了,但是没有做路径映射来写一个post,它来映射我们的at tr relation delete请求。来重新启动。
13:00
再来测试一出。我们把这一块都先清空,包括控制台点击移除,我发现在这还是404,呃,404的原因,这个at tr我们现在放到at tr这个controlrler里边了,它的前置路径不是at tr group,那就把这个方法放到at tr group的controlrler里边,At tr group,好,我来填上它的这个删除方法。把它拿过来。来重新启动。先再来测试移除,把这块清空,点击移除。诶,我们发现在这儿说系统位置异常,那就是我们控制台报错了,来到我们这儿,我发现呢,在这儿有一个错误,在这错误的原因说没有什么默认构造器来找到这一类,相当于在封装at tr group relation VO的时候出错了,那就在这。那我们在这呢?忘记了一个非常重要的写法,我们post请求会携带来阶层数据,要封装成我们自定义的对象,必须加一个注解,叫request body,我们将请求题里面的数据呢封装腾它,然后我们来重新启动,现在再来进行测试,我来点击移除。
14:15
那在这一块呢,就是说删除真空,包括我们的批量删除也是都可以用的,我点击批量删除,那获取分组里边的所有属性以及删除功能,我们就写完了。
我来说两句