新增商品规格

分析

在这里插入图片描述
在这里插入图片描述
规格和规格选项分为两个表存储,向后台传递的json形式如下:
a、b分别是对应数据表的两个实体类
a、b为key,a所对应的value是一个json对象(a类型),b所对应的value值是一个json数组(多个b类型的对象列表)
在这里插入图片描述
为了能接收上述形式的json,我们需要定义一个包含a、b两个实体类的pojo

public class Specification implements Serializable {
    private TbSpecification specification;
    private List<TbSpecificationOption> specificationOption;

    public Specification() {
    }

    public Specification(TbSpecification specification, List<TbSpecificationOption> specificationOption) {
        this.specification = specification;
        this.specificationOption = specificationOption;
    }

    public TbSpecification getSpecification() {
        return specification;
    }

    public void setSpecification(TbSpecification specification) {
        this.specification = specification;
    }

    public List<TbSpecificationOption> getSpecificationOption() {
        return specificationOption;
    }

    public void setSpecificationOption(List<TbSpecificationOption> specificationOption) {
        this.specificationOption = specificationOption;
    }
}

后端代码

controller层

@RequestMapping("/add")
public Result add(@RequestBody Specification specification){
	try {
		specificationService.add(specification);
		return new Result(true, "增加成功");
	} catch (Exception e) {
		e.printStackTrace();
		return new Result(false, "增加失败");
	}
}

service层

public void add(Specification specification) {
	//插入规格
	specificationMapper.insert(specification.getSpecification());
	//插入规格选项
	for(TbSpecificationOption specificationOption :specification.getSpecificationOption()){
		//设置规格id(必须先设置id的回显)
		specificationOption.setSpecId(specification.getSpecification().getId());
		//插入到数据库
		specificationOptionMapper.insert(specificationOption);
	}
}

设置id的回显(id是自增的,在执行插入后不用重新获取实体达到id的回显)
需要在mapper层设置 useGeneratedKeys=“true” keyProperty=“id” keyColumn=“id”

<insert id="insert" parameterType="com.weilinyang.pojo.TbSpecification" useGeneratedKeys="true" keyProperty="id" keyColumn="id">
  insert into tb_specification (id, spec_name)
  values (#{id,jdbcType=BIGINT}, #{specName,jdbcType=VARCHAR})
</insert>

前端页面

1、绑定规格名称

<td><input  class="form-control" placeholder="规格名称" ng-model="entity.specification.specName">  </td>

2、添加规格选项,规格选项初始不显示 当点击增加的时候添加一条,给新建按钮绑定model,初始化一个存放b对象的数组,初始为空。

<button type="button" class="btn btn-default" title="新建" data-toggle="modal" data-target="#editModal" ng-click="entity={specificationOption:[]}"><i class="fa fa-file-o"></i> 新建</button>

3、当我们遍历这个数组的时候,开始为空,新建一个条目就给数组添加一个空值

 <button type="button" class="btn btn-default" title="新建" ng-click="addRow()"><i class="fa fa-file-o"></i> 新增规格选项</button>
$scope.addRow = function () {
	//给数组加个空元素
	$scope.entity.specificationOption.push({});
};

4、删除条目

<button type="button" class="btn btn-default" title="删除" ng-click="deleteRow($index)"><i class="fa fa-trash-o"></i> 删除</button>
$scope.deleteRow = function (idx) {//索引
	$scope.entity.specificationOption.splice(idx,1);
}

商品规格的修改

注意:商品规格的规格选项修改,每次修改都是添加、删除规格选项列表的操作而不是对原有规格选项进行修改的操作。
所以在后端我们要对数据库中的规格选项删除,然后再用“修改”的规格选项进行添加

public void update(Specification specification){
	specificationMapper.updateByPrimaryKey(specification.getSpecification());
	//先删除原来的规格选项,再加入新的规格选项
	TbSpecificationOptionExample example = new TbSpecificationOptionExample();
	TbSpecificationOptionExample.Criteria criteria = example.createCriteria();
	criteria.andSpecIdEqualTo(specification.getSpecification().getId());
	specificationOptionMapper.deleteByExample(example);
	//插入新的规格选项
	for (TbSpecificationOption specificationOption : specification.getSpecificationOption()) {
		specificationOption.setSpecId(specification.getSpecification().getId());
		specificationOptionMapper.insert(specificationOption);
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值