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

表关系:

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);
    }
}
相关推荐
伏虎山真人2 小时前
测试杂文 - linux串口打印
linux·运维·服务器
rayylee2 小时前
kvm-dmesg:从宿主机窥探虚拟机内核dmesg日志
linux·运维·服务器·驱动开发·后端·安全
努力的小T2 小时前
Linux Docker 部署 Jenkins 详解教程
linux·运维·服务器·docker·云计算·jenkins
谢尔登2 小时前
【Next】中间件
服务器·javascript·中间件
唐宋元明清21883 小时前
Win11 自动色彩管理(ACM)
windows
Curtis09803 小时前
RHCE——WEB服务器的部署及优化
java·服务器·前端
九河云4 小时前
阿里云轻量应用服务器可以用在哪些场景呢
服务器·阿里云·云计算
lexusv8ls600h4 小时前
你的服务器缓存中毒过么?
服务器·web安全·缓存
老理说的好4 小时前
【无标题】网络命名空间中创建双网卡
服务器·网络