【Mybatis】前端传集合到后台,后台查询到的集合给前端

33 篇文章 3 订阅
8 篇文章 0 订阅
本文详细介绍了如何在后端创建表存储动态数据,并通过前端进行产品属性的动态填写和提交。在后端实现产品属性的增删改查,包括使用实体类、Controller、Service和DAO层的代码示例。前端在提交时需传递空集合避免报错。同时提供了两种插入数据的方法。在更新操作中,先删除原有属性,再根据新属性集合重新插入。总结了关键步骤和注意事项,为实际开发提供思路。
摘要由CSDN通过智能技术生成

应用场景:

  • 图片(比如填报一个产品,这个产品有很多属性,里面有这种动态的增删改查操作,应该怎么操作),像这种的还有传视频还有图片什么的
    在这里插入图片描述
  • 思路:
    • 后端:是再创建一个表,专门存这种动态的数据(数据库表这样,里面存一个产品的id,进行关联产品所有的属性)
      在这里插入图片描述

    • 前端:用户在前端进行填写申报的时候,前端进行动态的传集合数据。如果为空,传空集合
      在这里插入图片描述

    • postman 测试新增:
      在这里插入图片描述
      在这里插入图片描述

增查代码案例:

  • 实体类
//NewProductAdd 产品实体类,一对多的情况
@ApiModelProperty(value = "ID", example = "")
private String id;

@ApiModelProperty(value = "名称", example = "")
private String name;

@ApiModelProperty(value = "产品属性", example = "")
private List<NewProductAttributeAdd> newProductAttributeAdds;

//-----------------------------------------------------------

//NewProductAttributeAdd 产品属性关联表的实体类
@ApiModelProperty(value = "ID", example = "")
private String id;

@ApiModelProperty(value = "供需id", example = "")
private String productId;

@ApiModelProperty(value = "属性名", example = "")
private String name;

@ApiModelProperty(value = "属性值", example = "")
private String value;

  • controller
/**
    * 添加供需产品表
    *
    * @param param 供需产品表添加参数
    * return 供需产品表操作结果信息返回
    */
    @ApiOperation(value = "添加供需产品表", notes = "添加供需产品表", httpMethod = "POST")
    @PostMapping(value = "/newProduct/add")
    public Result addNewProduct (@Validated @RequestBody @ApiParam(value = "添加供需产品表参数") NewProductAdd param) {
        newProductService.addNewProduct(param);
        return Result.SUCCESS;
    }

/**
    * 查询供需产品表分页信息列表
    *
    * @param param 供需产品表列表参数
    * return 供需产品表列表信息返回
    */
    @ApiOperation(value = "查询供需产品表", notes = "查询供需产品表", httpMethod = "POST")
    @PostMapping(value = "/newProduct/list")
    public ResultPage<NewProductListItem> listNewProduct (@Validated @RequestBody @ApiParam(value = "查询供需产品表列表参数") NewProductList param) {
        PageInfo<NewProductListItem> bean = newProductService.listNewProduct(param,true);
        return new ResultPage(bean);
  • service
//添加供需产品表
NewProduct addNewProduct(NewProductAdd newProductAdd);

//查询供需产品表分页信息列表
PageInfo<NewProductListItem> listNewProduct(NewProductList param,Boolean isportal);
  • impl
//添加供需产品表
@Override
@Transactional(rollbackFor = Exception.class, timeout = Constants.TIMEOUT)
public NewProduct addNewProduct(NewProductAdd param) {
    NewProduct bean = new NewProduct();
    BeanUtils.copyProperties(param, bean);
    bean.setId(StringUtil.uuid());
    this.newProductDao.addNewProduct(bean);

	//如果修改的话,先删除产品属性,然后再添加
    //newProductAttributeDao.removeNewProductAttributeByProductId(param.getId());
    // 保存产品属性,这里是单独的一张表,就是遍历将每条属性添加这张表里
    List<NewProductAttributeAdd> newProductAttributeAdds = param.getNewProductAttributeAdds();
    if (!CollectionUtils.isEmpty(newProductAttributeAdds)) {
        for (NewProductAttributeAdd newProductAttributeAdd : newProductAttributeAdds) {
            newProductAttributeAdd.setProductId(bean.getId());
            newProductAttributeService.addNewProductAttribute(newProductAttributeAdd);
        }
    }

// 保存产品属性,第二种方式插入表中,插入多条数据只需要一个sql
/*List<NewProductAttributeAdd> newProductAttributeAdds = param.getNewProductAttributeAdds();
if (!CollectionUtils.isEmpty(newProductAttributeAdds)) {
    for (NewProductAttributeAdd newProductAttributeAdd : newProductAttributeAdds) {
        newProductAttributeAdd.setProductId(bean.getId());
        newProductAttributeAdd.setId(StringUtil.uuid());
    }
    newProductAttributeDao.insertBatchNewProductAttribute(param.getNewProductAttributeAdds());
}*/
    
    return bean;
}

//查询供需产品表分页信息列表
@Override
public PageInfo<NewProductListItem> listNewProduct(NewProductList param, Boolean isportal) {
    List<NewProductListItem> list = new ArrayList<>();
    if (isportal) {
        PageHelper.startPage(param.getPageIndex(), param.getPageSize());
        list = newProductDao.listNewProductPortal(param);
    } 
    return new PageInfo<NewProductListItem>(list);
}
  • dao
//添加供需产品表
void addNewProduct(NewProduct newProduct);

//批量添加供需产品表(第二种方式批量添加)
void insertBatchNewProductAttribute(List<NewProductAttributeAdd> newProductAttributeAdds);

//查询供需产品表分页信息列表
List<NewProductListItem> listNewProductPortal(NewProductList param);

/** 修改的时候,需要先删除产品属性,会用到这个sql语句 */
@Delete("delete from new_product_attribute where product_id = #{id}")
void removeNewProductAttributeByProductId(@Param("id") String id);
  • xml
<!-- 添加NewProduct -->
<insert id="addNewProduct">
        insert into new_product(id,name)
        values (#{id},#{name})
</insert>

<!-- 批量添加供需产品表,这是第二种方式批量添加 -->
<insert id="insertBatchNewProductAttribute">
    insert into new_product_attribute(id, product_id, name, value) values
    <foreach collection="list" item="item" separator="," open="" close="">
        (#{item.id},#{item.productId},#{item.name},#{item.value})
    </foreach>
</insert>

<!-- 查询供需产品表分页信息列表 -->
<resultMap id="NewProductListItemPortal" type="com.yeyoo.mall.beans.NewProduct.NewProductListItem" extends="NewProductMap">
    <collection column="id" property="newProductAttributes" javaType="java.util.List" select="com.yeyoo.mall.dao.NewProductAttributeDao.findNewProductAttributeByProductId"/>
</resultMap>
<select id="listNewProductPortal" resultMap="NewProductListItemPortal">
    select * from new_product
    <trim prefix="where" suffixOverrides="and">
        <if test="name != null and name != ''">a.name like concat('%',#{name},'%') and </if>
    </trim>
</select>

修改代码案例:

  • 修改代码与新增差不多,不同的地方是产品属性这边先要全部删除之前的,然后再根据前端传过来的属性集合重新添加到数据库中

总结:

  • 前面的代码基本不差,要是用的话,需要根据自己的代码,再修改修改,这边只是提供个思路
  • 如果前端产品属性没传,要让前端传空集合给后台,不然后台会报错
  • 添加那里用了两种方式,一种是几条数据就几条插入sql。但是用第二种方式,就是只用了一条插入sql语句
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值