分组分类的查询与保存

简介: 分组分类的查询与保存

1.给属性分组模块添加模糊查询功能

    @Override
    public PageUtils queryPage(Map<String, Object> params, Long catelogId) {
        String key = (String) params.get("key");
        //带有模糊查询数据的就用new QueryWrapper
        QueryWrapper<AttrGroupEntity> wrapper = new QueryWrapper<AttrGroupEntity>();
//            如果传过来的key不为空
        if (!StringUtils.isEmpty(key)){
//                拼接后面的模糊查询and (attr_group_id = key or attr_group_name like %key%)
            wrapper.and(obj->{
                obj.eq("attr_group_id",key).or().like("attr_group_name",key);
            });
        }
        if (catelogId==0){
            //等于0就相当于查询所有~~
            IPage<AttrGroupEntity> page = this.page(
                    new Query<AttrGroupEntity>().getPage(params),
                    wrapper
            );
            return new PageUtils(page);
        }else {
            //检索条件
//            select * from pms_attr_group where catelog_id = ? and (attr_group_id = key or attr_group_name like %key%)
                wrapper.eq("catelog_id",catelogId);
//            查询出来数据之后开始跟分页一起返回封装
            IPage<AttrGroupEntity> page = this.page(new Query<AttrGroupEntity>().getPage(params),wrapper);
            return new PageUtils(page);
        }
    }

2.介绍一下VO对象

1.view object (vo) 它类似与一个实体类,它是接受页面传递过来的数据,将业务处理完成的对象,封装成页面想要的对象,
好比如说实体类中的每一个对象,对应的是数据库中的每一个字段,这时候前台需要接受一个数据库中没有的字段,这个
时候就可以创建一个vo对象,这个类中可以不加任何的注解。

package com.atdada.dadamall.product.vo;

import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;

/**
 * @Author:dada
 * @Date:2020/11/5 21:53
 * @Version 1.0
 */
@Data
public class AttrVo {

    /**
     * 属性id
     */
    private Long attrId;
    /**
     * 属性名
     */
    private String attrName;
    /**
     * 是否需要检索[0-不需要,1-需要]
     */
    private Integer searchType;
    /**
     * 属性图标
     */
    private String icon;
    /**
     * 可选值列表[用逗号分隔]
     */
    private String valueSelect;
    /**
     * 属性类型[0-销售属性,1-基本属性,2-既是销售属性又是基本属性]
     */
    private Integer attrType;
    /**
     * 启用状态[0 - 禁用,1 - 启用]
     */
    private Long enable;
    /**
     * 所属分类
     */
    private Long catelogId;
    /**
     * 快速展示【是否展示在介绍上;0-否 1-是】,在sku中仍然可以调整
     */
    private Integer showDesc;
    /**
     *不是库里面的
     */
    private Long attrGroupId;
}
2.钱太多传递了一个数据库中字段没有的参数(attrGroupId字段),接下来就在项目中创建vo对象,在做保存方法的时候
加上vo的这个参数,下面是我写的实现层:

    //整个方法也是一个事务
    @Transactional
    @Override
    public void saveAttr(AttrVo attr) {
        //new出来的是一个PO,是对应数据库的,AttrVo对象是来源于页面的数据
        AttrEntity attrEntity = new AttrEntity();
        //前台传过来的数据(vo对象)再次赋值给这个(PO)实体类的对象
//        attrEntity.setAttrName(attr.getAttrName());
        //发现上面的做法太累了,可以使用一个封装好的类,将前台传递的值,复制给数据库的字段
        BeanUtils.copyProperties(attr,attrEntity);
        //1.保存基本数据完成
        this.save(attrEntity);
        //2.保存关联的信息
        AttrAttrgroupRelationEntity relationEntity = new AttrAttrgroupRelationEntity();
        relationEntity.setAttrGroupId(attr.getAttrGroupId());
        relationEntity.setAttrId(attrEntity.getAttrId());
        attrAttrgroupRelationDao.insert(relationEntity);

    }

3.写查询的功能

接口文档
在这里插入图片描述
实现的代码Controlelr层

@GetMapping("/base/list/{catelogId}")
    public R baseAttrList(@RequestParam Map<String, Object> params,@PathVariable("catelogId") Long catelogId/*路径变量就要用上这个参数*/){
        //开始带上参数查询数据返回PageUtils page
        PageUtils page = attrService.queryBaseAttrPage(params,catelogId);
        return R.ok().put("page", page);
    }

实现层

    @Override
    public PageUtils queryBaseAttrPage(Map<String, Object> params, Long catelogId) {
        QueryWrapper<AttrEntity> queryWrapper = new QueryWrapper<>();
        //如果catelogId==0说明是查看所有的,反之~
        if (catelogId != 0){
            queryWrapper.eq("catelog_id",catelogId);
        }
        //获取key的就值
        String  key = (String) params.get("key");
        //如果key不为空的时候说明是有参数传进来的
        if (!StringUtils.isEmpty(key)){
            //sql语句后面接and并且后面两个条件需要()一起括起来就可以写这个()—>箭头函数
            queryWrapper.and((wrapper)->{
                wrapper.eq("attr_id",key).or().like("attr_name",key);
            });
        }
        IPage<AttrEntity> page = this.page(
                new Query<AttrEntity>().getPage(params),
                queryWrapper
        );
        return new PageUtils(page);
    }

返给前台页面显示效果在这里插入图片描述
我们发现有两个字段是空的,加下来还要写一个VO对象

package com.atdada.dadamall.product.vo;

import lombok.Data;

/**
 * @Author:dada
 * @Date:2020/11/5 22:32
 * @Version 1.0
 */
@Data
//这个类是一个相应给前台的Vo对象,可以继承AttrVo里面的所有对象值
public class AttrRespVo extends AttrVo{
    private String catelogName;
    private String groupName;
}

接下来继续在实现层做增加一些逻辑

    @Override
    public PageUtils queryBaseAttrPage(Map<String, Object> params, Long catelogId) {
        QueryWrapper<AttrEntity> queryWrapper = new QueryWrapper<>();
        //如果catelogId==0说明是查看所有的,反之~
        if (catelogId != 0){
            queryWrapper.eq("catelog_id",catelogId);
        }
        //获取key的就值
        String  key = (String) params.get("key");
        //如果key不为空的时候说明是有参数传进来的
        if (!StringUtils.isEmpty(key)){
            //sql语句后面接and并且后面两个条件需要()一起括起来就可以写这个()—>箭头函数
            queryWrapper.and((wrapper)->{
                wrapper.eq("attr_id",key).or().like("attr_name",key);
            });
        }
        IPage<AttrEntity> page = this.page(
                new Query<AttrEntity>().getPage(params),
                queryWrapper
        );
        //这里通过测试发现少了两个字段名称(catelogName,groupName)没有显示出来,但是可以通过这个分页中获取出来
        PageUtils pageUtils = new PageUtils(page);
        List<AttrEntity> records = page.getRecords();//获取记录
        List<AttrRespVo> attr_id1 = records.stream().map(item -> {
            AttrRespVo attrRespVo = new AttrRespVo();
            //创建出新的对象,可以把基本的数据拷贝过来
            BeanUtils.copyProperties(item, attrRespVo);
            //接下来调用dao去数据库查询来设置分类分组的名字
            //1.关联关系的表查询一条记录
            AttrAttrgroupRelationEntity attr_id = attrAttrgroupRelationDao.selectOne(new QueryWrapper<AttrAttrgroupRelationEntity>().eq("attr_id", item.getAttrId()));
            //2.得到这个组的di,这里有可能会是空的,因为第一次录数据没有指点组,就会出现空,这里还需要判定空指针
            if (attr_id != null) {
                //根据id查询出一条数据来,然后开始取值
                AttrGroupEntity attrGroupEntity = attrGroupDao.selectById(attr_id.getAttrGroupId());
                attrRespVo.setGroupName(attrGroupEntity.getAttrGroupName());
            }
            //以上是分组的就赋值好了
            //以下是分类
            CategoryEntity categoryEntity = categoryDao.selectById(item.getCatelogId());
            if (categoryEntity != null) {
                attrRespVo.setCatelogName(categoryEntity.getName());
            }
            return attrRespVo;
            //收集成一个集合返回
        }).collect(Collectors.toList());
        //赋值到pageUtils中
        pageUtils.setList(attr_id1);
        return pageUtils;
    }

最终效果如下:
在这里插入图片描述
以上是我的个人笔记,探索未知密宝,记录学习笔记,分享有趣的故事,欢迎大家来访!

相关文章
|
7月前
|
Serverless Python
分组和聚合DataFrame信息案例解析
该文介绍了如何使用pandas对DataFrame进行分组和聚合操作。首先,通过创建字典并转换为DataFrame,展示了基础数据结构。接着,利用`groupby()`方法按城市字段进行数据分组,然后应用`mean()`函数计算各城市平均年龄,显示了聚合功能。此外,文中指出还可使用`sum()`、`count()`等其他聚合函数处理分组数据。
79 0
|
7月前
|
数据处理
利用Stream流将取到的对象List<对象>形式数据进行分组统计转变成Map<分组条件,数量统计>形式
利用Stream流将取到的对象List<对象>形式数据进行分组统计转变成Map<分组条件,数量统计>形式
69 0
|
3月前
如何优雅地对数据进行分组?
如何优雅地对数据进行分组?
41 0
|
6月前
|
SQL DataWorks 数据处理
DataWorks产品使用合集之假设存在时间戳字段: 假设源表有一个记录数据更新时间的字段,如何设置过滤条件
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
28 1
|
6月前
|
SQL 安全 数据挖掘
Elasticsearch如何聚合查询多个统计值,如何嵌套聚合?并相互引用,统计索引中某一个字段的空值率?语法是怎么样的?
Elasticsearch聚合查询用于复杂数据分析,包括统计空值率。示例展示了如何计算字段`my_field`非空非零文档的百分比。查询分为三步:总文档数计数、符合条件文档数计数及计算百分比。聚合概念涵盖度量、桶和管道聚合。脚本在聚合中用于动态计算。常见聚合类型如`sum`、`avg`、`date_histogram`等。组合使用可实现多值统计、嵌套聚合和空值率计算。[阅读更多](https://zhangfeidezhu.com/?p=515)
309 0
Elasticsearch如何聚合查询多个统计值,如何嵌套聚合?并相互引用,统计索引中某一个字段的空值率?语法是怎么样的?
|
7月前
|
数据安全/隐私保护
离线表数据敏感字段自动id化处理
离线表数据敏感字段自动id化处理
82 0
|
JSON API 开发者
如何使用分类ID参数过滤搜索词推荐数据?
一、背景介绍 阿里巴巴中国站的搜索词推荐数据对于开发者来说具有重要的参考价值。通过使用获得搜索词推荐 API,开发者可以获取到用户在平台上的搜索行为数据,了解用户的需求和行为,优化产品和服务。在获取搜索词推荐数据的过程中,有时候需要对数据进行更精细的过滤和分析。其中,分类ID参数是一个非常重要的过滤条件,可以帮助开发者更好地筛选数据。本文将详细介绍如何使用分类ID参数过滤搜索词推荐数据,帮助读者更好地理解和使用该 API。
|
iOS开发 索引
LeetCode--1773. 统计匹配检索规则的物品数量
给你一个数组 items ,其中 items[i] = [typei, colori, namei] ,描述第 i 件物品的类型、颜色以及名称。 另给你一条由两个字符串 ruleKey 和 ruleValue 表示的检索规则。 如果第 i 件物品能满足下述条件之一,则认为该物品与给定的检索规则 匹配 : ruleKey == "type" 且 ruleValue == typei 。 ruleKey == "color" 且 ruleValue == colori 。 ruleKey == "name" 且 ruleValue == namei 。 统计并返回 匹配检索规则的物品数量 。
83 0
es聚合查询并且返回对应组的数据
es聚合查询并且返回对应组的数据
447 0
Excel 技术篇-跨页签统计某一区域下符合条件值的数量方法,COUNTIF函数、数量统计公式的用法实例演示
Excel 技术篇-跨页签统计某一区域下符合条件值的数量方法,COUNTIF函数、数量统计公式的用法实例演示
394 0
Excel 技术篇-跨页签统计某一区域下符合条件值的数量方法,COUNTIF函数、数量统计公式的用法实例演示