电商微服务项目第二天(平台属性管理)

表关系:

1.查询平台属性

java 复制代码
    /**
     * 查询平台属性
     * 请求参数三个:一级菜单id,二级菜单id,三级菜单id
     * attrInfoList/2/0/0
     */
    @GetMapping("attrInfoList/{category1_id}/{category2_id}/{category3_id}")
     public Result<List<BaseAttrInfo>> a(@PathVariable("category1_id") Long category1_id,
             @PathVariable("category2_id") Long category2_id,
             @PathVariable("category3_id") Long category3_id){
        //业务层查询,传递三个分类菜单主键,返回值,存储属性信息集合
        List<BaseAttrInfo> baseAttrInfoList = baseAttrInfoService.
                findBaseAttrInfo(category1_id,category2_id,category3_id);
        return Result.ok(baseAttrInfoList);
    }
}
sql 复制代码
  <resultMap id="findBaseAttrInfoResultMap" type="com.home.mall.entity.BaseAttrInfo">
    <id column="id" property="id"/>
        <result column="attr_name" property="attrName"/>
        <result column="category_id" property="categoryId"/>
        <result column="category_level" property="categoryLevel"/>
        <collection property="attrValueList" ofType="com.home.mall.entity.BaseAttrValue">
            <id column="vid" property="id"/>
            <result column="value_name" property="valueName"/>
            <result column="attr_id" property="attrId"/>
        </collection>
    </resultMap>
    <select id="findBaseAttrInfo" resultMap="findBaseAttrInfoResultMap">
        select bai.id,bai.attr_name,bai.category_id,bai.category_level,
        bav.id vid, bav.value_name, bav.attr_id
        from base_attr_info bai LEFT JOIN base_attr_value bav
        on bai.id = bav.attr_id
        <!--
             拼接查询条件 根据请求参数
              attrInfoList/2/0/0
              @Param("category1_id") Long category1_id,
              @Param("category2_id")Long category2_id,
              @Param("category3_id")Long category3_id)
   
               where bai.category_level = 1 and  bai.category_id = #{category1_id}
               or bai.category_level = 2 and  bai.category_id = #{category2_id}
              -->
        <where>
            <if test="category1_id!=0">
                bai.category_level = 1 and bai.category_id = #{category1_id}
            </if>
            <if test="category2_id!=0">
                or (bai.category_level = 2 and bai.category_id = #{category2_id})
            </if>
            <if test="category3_id!=0">
                or (bai.category_level = 3 and bai.category_id = #{category3_id})
            </if>
        </where>
    </select>

2.添加平台属性

接口文档种规定,新增和修改都是用saveAttrInfo接口实现,所以逻辑如下:

传进的baseAttrInfo.getId()若为0,则执行插入,否则执行updata,

updata执行时为了避免主键冲突,需要将平台属性先更新,再将平台属性对应的平台属性值删除后在添加;

请注意在entity中的BaseAttrInfo的List<BaseAttrValue> attrValueList上写上**@TableField(exist = false)**,告诉mp框架查询时不需要查找,此字段用于更新和插入;

复制代码
/**
 *  一对多的集合 ,查询实现手动映射
 *  新增数据,数据表BaseAttrInfo 没有attrValueList字段
 *  告诉MP框架,这个字段表中可能不存在
 */
@TableField(exist = false)
private List<BaseAttrValue> attrValueList;
java 复制代码
 /**
     * 新增和修改平台属性
     * 请求参数:新增的属性和属性值
     * 属性是一个,属性值多个
     * 向两个表中添加数据 必须有事务
     * 请求参数 baseAttrInfo
     * 判断请求参数中的 id = null
     *   执行数据的新增
     * id != null
     *   执行修改的操作
     *
     */
    @PostMapping("saveAttrInfo")
    public Result saveAttrInfo(@RequestBody BaseAttrInfo baseAttrInfo){
        baseAttrInfoService.saveAttrInfo(baseAttrInfo);
        return Result.ok();
    }
java 复制代码
 @Override
    @Transactional
    @Operation(summary = "保存属性信息")
    public void saveAttrInfo(BaseAttrInfo baseAttrInfo) {
        Long id = baseAttrInfo.getId();
        // 判断是否新增
        if (id==null){
            save(baseAttrInfo);
            baseAttrInfo.getAttrValueList().forEach(baseAttrValue -> {
                baseAttrValue.setAttrId(baseAttrInfo.getId());
                baseAttrValueMapper.insert(baseAttrValue);
            });
        }
        // 修改
        else if (id!=null){
            updateById(baseAttrInfo);
            // 删除所有属性值
            QueryWrapper<BaseAttrValue> baseAttrValueQueryWrapper =
                    new QueryWrapper<BaseAttrValue>().eq("attr_id",id);
            baseAttrValueMapper.delete(baseAttrValueQueryWrapper);
            // 添加所有属性值
            baseAttrInfo.getAttrValueList().forEach(baseAttrValue -> {
                baseAttrValue.setAttrId(baseAttrInfo.getId());
                baseAttrValueMapper.insert(baseAttrValue);
            });
        }
   }
java 复制代码
    @Autowired
    private BaseAttrValueMapper baseAttrValueMapper;
    /**
     * 平台属性主键查询
     * 请求参数主键
     */
    @RequestMapping("getAttrValueList/{attrId}")
    public Result<List<BaseAttrValue>> getAttrValueList(@PathVariable("attrId") Long attrId){
        QueryWrapper<BaseAttrValue> baseAttrValueQueryWrapper = new QueryWrapper<BaseAttrValue>().eq("attr_id",attrId);
        List<BaseAttrValue> baseAttrValueList= baseAttrValueMapper.selectList(baseAttrValueQueryWrapper);
        return Result.ok(baseAttrValueList);
    }

3.分页查询销售属性

java 复制代码
@RestController
@RequestMapping("admin/product")
public class SpuInfoController {
    @Autowired
    private SpuInfoService spuInfoService;
    @Operation(summary = "分页查询销售属性")
   @GetMapping("/{page}/{limit}")
    public Result<Page<SpuInfo>> findPageByCategoryId(@PathVariable("page") Integer page,
                                  @PathVariable("limit") Integer limit,
                                  Long category3Id){
       Page<SpuInfo> pageParam =spuInfoService.findPageByCategoryId(page,limit,category3Id);
       return Result.ok(pageParam);
   }
}
java 复制代码
/**
* @author Bob
* @description 针对表【spu_info(商品表)】的数据库操作Service实现
* @createDate 2024-11-16 10:49:18
*/
@Service
public class SpuInfoServiceImpl extends ServiceImpl<SpuInfoMapper, SpuInfo>
    implements SpuInfoService{
    @Override
    @Operation(summary = "分页查询销售属性")
    public Page<SpuInfo> findPageByCategoryId(Integer page, Integer limit, Long category3Id) {
        Page<SpuInfo> page1=new Page<>(page,limit);
        QueryWrapper<SpuInfo> spuInfoQueryWrapper = new QueryWrapper<SpuInfo>()
                .eq("category3_id",category3Id);
        return this.page(page1,spuInfoQueryWrapper);
    }
}
相关推荐
新兴ICT项目支撑6 小时前
天翼云910B部署DeepSeek蒸馏70B LLaMA模型实践总结
linux·运维·服务器·910b·天翼云·deepseek r1
网硕互联的小客服8 小时前
如何提高网站在百度中的权重?
linux·运维·服务器·windows·安全
魔希达8 小时前
windows在wsl ubuntu环境中启用cuda加速AI推理和训练
人工智能·windows·ubuntu
敲代码的小王!9 小时前
在Java项目中跨域的解决办法
java·开发语言·微服务·springboot
青啊青斯10 小时前
Windows搭建CUDA大模型Docker环境
windows·docker·容器
@明明不知道11 小时前
spring cloud 微服务部署(2025年)第一章:Nacos、LoadBalancer、GateWay、Ribbon集成之Nacos部署
spring cloud·微服务·nacos·gateway·loadbalancer
zyx没烦恼11 小时前
Linux 进程控制(进程创建,进程等待)
linux·运维·服务器
EPSDA11 小时前
Linux线程库与线程库封装
linux·运维·服务器·开发语言·c++
luoqice15 小时前
ubuntu下安装TFTP服务器
linux·服务器
马浩同学16 小时前
【ESP32】ESP-IDF开发 | WiFi开发 | HTTPS服务器 + 搭建例程
服务器·c语言·网络·单片机·mcu·https