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

2022-02-20 22:12:01

应用场景:

  • 图片(比如填报一个产品,这个产品有很多属性,里面有这种动态的增删改查操作,应该怎么操作),像这种的还有传视频还有图片什么的
    在这里插入图片描述
  • 思路:
    • 后端:是再创建一个表,专门存这种动态的数据(数据库表这样,里面存一个产品的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);returnnewResultPage(bean);
  • service
//添加供需产品表
NewProductaddNewProduct(NewProductAdd newProductAdd);//查询供需产品表分页信息列表
PageInfo<NewProductListItem>listNewProduct(NewProductList param,Boolean isportal);
  • impl
//添加供需产品表@Override@Transactional(rollbackFor= Exception.class, timeout= Constants.TIMEOUT)public NewProductaddNewProduct(NewProductAdd param){
    NewProduct bean=newNewProduct();
    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;}//查询供需产品表分页信息列表@Overridepublic PageInfo<NewProductListItem>listNewProduct(NewProductList param, Boolean isportal){
    List<NewProductListItem> list=newArrayList<>();if(isportal){
        PageHelper.startPage(param.getPageIndex(), param.getPageSize());
        list= newProductDao.listNewProductPortal(param);}returnnewPageInfo<NewProductListItem>(list);}
  • dao
//添加供需产品表voidaddNewProduct(NewProduct newProduct);//批量添加供需产品表(第二种方式批量添加)voidinsertBatchNewProductAttribute(List<NewProductAttributeAdd> newProductAttributeAdds);//查询供需产品表分页信息列表
List<NewProductListItem>listNewProductPortal(NewProductList param);/** 修改的时候,需要先删除产品属性,会用到这个sql语句 */@Delete("delete from new_product_attribute where product_id = #{id}")voidremoveNewProductAttributeByProductId(@Param("id") String id);
  • xml
<!-- 添加NewProduct--><insert id="addNewProduct">
        insert intonew_product(id,name)
        values(#{id},#{name})</insert><!-- 批量添加供需产品表,这是第二种方式批量添加--><insert id="insertBatchNewProductAttribute">
    insert intonew_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 likeconcat('%',#{name},'%') and</if></trim></select>

修改代码案例:

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

总结:

  • 前面的代码基本不差,要是用的话,需要根据自己的代码,再修改修改,这边只是提供个思路
  • 如果前端产品属性没传,要让前端传空集合给后台,不然后台会报错
  • 添加那里用了两种方式,一种是几条数据就几条插入sql。但是用第二种方式,就是只用了一条插入sql语句
  • 作者:致最长的电影
  • 原文链接:https://blog.csdn.net/yuxiangdeming/article/details/116780523
    更新时间:2022-02-20 22:12:01