如何使用myabtisPlust将查询出的数据封装给vo对象

效果演示

  • 将目的地和对应的攻略分类显示出来
    在这里插入图片描述

准备工作

表结构

在这里插入图片描述

实体类

  • 攻略分类实体
    在这里插入图片描述
  • 目的地实体
    在这里插入图片描述

用于返回数据给前端的Vo部分

@Setter
@Getter
@ToString
public class CatalogVo {
        private String destName;
        private List<StrategyCatalog> catalogList = new ArrayList<>();
}

控制器层部分

  • 注入攻略分类的业务层
 @Autowired
    private IStrategyCatalogService strategyCatalogService;
  • 共享此数据,即给前端显示出列表的所有数据
    在这里插入图片描述

业务层实现方法

  • 主要的逻辑是sql语句用到了聚合函数
  • 将目的地,和对应的所有攻略分类名和攻略分类id查询出来
    在这里插入图片描述
  • 通过mabatisPlus中的listMaps方法, 将sql语句中的数据封装进List<Map<String, Object>> list 中,然后将这些数据遍历出来,放进vo对象中,给到前端页面即可
  • 因为查询出的数据ids和names 都是字符串有,,所以另外设一个方法parseCatalog,将这2个参数放入,把值放进List中返回出来(也就是vo中的攻略分类集合)
 @Override
    public List<CatalogVo> queryGroupCatalog() {
        List<CatalogVo> vos = new ArrayList<>();
//        查询数据
        QueryWrapper<StrategyCatalog> wrapper = new QueryWrapper<>();
        wrapper.select("dest_name,GROUP_CONCAT(name) names,GROUP_CONCAT(id) ids")
                .groupBy("dest_name");
        List<Map<String, Object>> list = super.listMaps(wrapper);
//        dest_name names ids ----> vo
        for (Map<String,Object> map:list){
            CatalogVo vo = new CatalogVo();//            存目的地
            vo.setDestName(map.get("dest_name").toString());//目的地名字
            String names = map.get("names").toString();
            String ids = map.get("ids").toString();
//            存攻略分类集合
            List<StrategyCatalog> catalogList = this.parseCatalog(names,ids);
            vo.setCatalogList(catalogList);
            vos.add(vo);
        }
        return vos;
    }

    private List<StrategyCatalog> parseCatalog(String names, String ids) {
       List<StrategyCatalog> list = new ArrayList<>();

       String[] ns = names.split(",");
       String[] is = ids.split(",");

       if (ns.length > 0){
           for (int i=0;i<ns.length;i++){
               String name = ns[i];
               String id = is[i];

               if (!StringUtils.hasLength(name)){
                   continue;
               }
               StrategyCatalog catalog = new StrategyCatalog();
               catalog.setName(name);
               catalog.setId(Long.parseLong(id));
               list.add(catalog);
           }
       }
        return list;
    }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值