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

表关系:

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);
    }
}
相关推荐
唐宋元明清218821 分钟前
Windows 记录开机后应用启动慢的问题
windows·系统异常
Yuan_o_1 小时前
Linux 基本使用和程序部署
java·linux·运维·服务器·数据库·后端
云云3211 小时前
怎么通过亚矩阵云手机实现营销?
大数据·服务器·安全·智能手机·矩阵
灯火不休➴1 小时前
[Xshell] Xshell的下载安装使用、连接linux、 上传文件到linux系统-详解(附下载链接)
linux·运维·服务器
小峰编程1 小时前
独一无二,万字详谈——Linux之文件管理
linux·运维·服务器·云原生·云计算·ai原生
卜及中1 小时前
【Linux】资源隔离机制 — 命名空间(Namespace)详解
linux·服务器·php
明 庭1 小时前
Ubuntu下通过Docker部署Caddy服务器
服务器·ubuntu·docker
MuLogin_Browser1 小时前
如何保障多个Facebook账号稳定运行:一账号一稳定IP?
服务器·tcp/ip·facebook
聚名网1 小时前
域名和服务器是什么?域名和服务器是什么关系?
服务器·前端
娶不到胡一菲的汪大东1 小时前
Linux的VIM基本操作
linux·运维·服务器