解决乐优商城规格组及规格参数的增删改问题

关于乐优商城这个讲解版本比较多,这里不再赘述了。对于商品规格管理这个模块,讲解的内容是规格组及商品规格参数的查询。增删改在教学中是作为作业来完成的。由于,整个项目的前端已经写好了相应的端口,整体来说并不算复杂。
这里介绍一下tb_spec_group和tb_spec_param,两张表之间采用group_id字段连接,需要注意的是表之间并没有设置外键,而是通过逻辑关系进行交互的。表字段如下:

@Table(name = "tb_spec_group")
public class SpecGroup {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private Long cid;

    private String name;

    @Transient
    private List<SpecParam> params;
}
@Table(name = "tb_spec_param")
public class SpecParam {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private Long cid;
    private Long groupId;
    private String name;
    @Column(name = "`numeric`")
    private Boolean numeric;
    private String unit;
    private Boolean generic;
    private Boolean searching;
    private String segments;
}

关于两张表的增删改的完成,这里因为前端已经写好了接口,我们需要依次接收,请求体依次如下:

规格组
改(Request URL: http://api.leyou.com/api/item/spec/group
增(Request URL: http://api.leyou.com/api/item/spec/group
删(Request URL: http://api.leyou.com/api/item/spec/group/28

后端Controller进行编写相应接口以及请求,代码如下:

//更新规格组
    @PutMapping("group")
    public ResponseEntity<Void> updateGroups(@RequestBody SpecGroup specGroup){
        this.specificationService.updateGroups(specGroup);
        return  ResponseEntity.status(HttpStatus.CREATED).build();
    }
    //新增规格组
    @PostMapping("group")
    public ResponseEntity<Void> insertGroups(@RequestBody SpecGroup specGroup){
        this.specificationService.insertGroups(specGroup);
        return  ResponseEntity.status(HttpStatus.CREATED).build();
    }

    //删除规格组
    @DeleteMapping("group/{id}")
    public ResponseEntity<Void> deleteGroups(@PathVariable("id")Long id){
        this.specificationService.deleteGroups(id);
        return  ResponseEntity.status(HttpStatus.CREATED).build();
    }

这里需要注意的是接收的类型(PutMappingPostMappingDeleteMapping)以及路径,同时因为更新新增我们返回路径传递的是整个对象,需要注解**@RequestBody**接收,关于传递的id以及其他参数,我们通常采用@PathVariable和 @RequestParam,,这两个注解的用法及区别在我的主页另一篇博客有介绍,这里就不详细说明了。

Controller编写完毕,这里依旧是采用调用mapper来完成,我们新建mapper接口引入实体类就行了,主要的还是业务层的代码。

 	@Transactional
    public void updateGroups(SpecGroup specGroup) {
         this.specGroupMapper.updateByPrimaryKey(specGroup);
    }
    @Transactional
    public void insertGroups(SpecGroup specGroup) {
        this.specGroupMapper.insertSelective(specGroup);
    }
    @Transactional
    public void deleteGroups(Long id) {
        this.specGroupMapper.deleteByPrimaryKey(id);
    }

业务层的代码以及调用的方法都是调用mapper里面自带的,我们无需编写,极大提高了开发效率。关于规格组的增删改到这里就完成了。

规格参数的话代码基本上是一致的,单表操作,思想没什么变化,这里附上代码

Controller:

//更新规格参数
    @PutMapping("param")
    public ResponseEntity<Void> updateSparams(@RequestBody SpecParam specParam){
        this.specificationService.updateSparams(specParam);
        return  ResponseEntity.status(HttpStatus.CREATED).build();
    }

    //新增规格组
    @PostMapping("param")
    public ResponseEntity<Void> insertParams(@RequestBody SpecParam specParam){
        this.specificationService.insertParams(specParam);
        return  ResponseEntity.status(HttpStatus.CREATED).build();
    }

    //删除规格组
    @DeleteMapping("param/{id}")
    public ResponseEntity<Void> deleteParams(@PathVariable("id")Long id){
        this.specificationService.deleteParams(id);
        return  ResponseEntity.status(HttpStatus.CREATED).build();
    }

Service:

	@Transactional
    public void updateSparams(SpecParam specParam) {
        this.specParamMapper.updateByPrimaryKey(specParam);
    }
    @Transactional
    public void insertParams(SpecParam specParam) {
        this.specParamMapper.insertSelective(specParam);
    }
    @Transactional
    public void deleteParams(Long id) {
        this.specParamMapper.deleteByPrimaryKey(id);
    }
}

你可能感兴趣的:(java,spring,boot,vue)