首页 > 其他分享 >小宋的SpringCloud学习记录day04:DB静态工具

小宋的SpringCloud学习记录day04:DB静态工具

时间:2024-06-17 16:58:18浏览次数:11  
标签:UserVO SpringCloud DB 用户 day04 地址 查询 List id

1.查询用户的同时,查询出用户对应的所有地址

在UserVo实体类里面添加一个集合用于接收Address地址

   @ApiModelProperty("用户收货地址")
    private List<AddressVO> addresses;

  接下来我们对业务层进行改造,要求我们在查询用户的时候把地址也查出来

Controller层:

  @ApiOperation("根据id查询用户接口")
    @GetMapping("{id}")
    public UserVO queryUserById(@ApiParam("用户id")@PathVariable("id") Long id) {

        return userService.queryUserAndAddressById(id);
    }

queryUserAndAddressById是我们自定义的方法用于查询用户时返回对应的地址,我们就在对应的Service层和实现类创造这个方法。

UserVO queryUserAndAddressById(Long id);
  @Override
    public UserVO queryUserAndAddressById(Long id) {
        //1.查询用户
        User user = getById(id);
        if (user == null|| user.getStatus() == 2){
            throw new RuntimeException("用户状态异常");
        }
        //2.查询地址
        List<Address> addresses = Db.lambdaQuery(Address.class).eq(Address::getUserId,id).list();
        //3.封装vo
        //3.1转UserVO为Po
        UserVO userVO =BeanUtil.copyProperties(user,UserVO.class);
        //3.2转地址Vo
        if (CollUtil.isNotEmpty(addresses)){
            userVO.setAddresses(BeanUtil.copyToList(addresses, AddressVO.class));
        }
        return userVO;
    }

我们登陆一下http://localhost:8080/doc.html#/home来查看一下查询的接口是不是编写正确,我们查询一下id=1是否能查出来用户的地址。

使用Db工具可以免除我们在开发中多个Service相互调用产生的循环依赖问题,非常好用。

2.批量查询id

  @ApiOperation("根据id批量查询用户接口")
    @GetMapping
    public List<UserVO> queryUserByIds(@ApiParam("用户id集合")@RequestParam("id") List<Long> ids) {
        return userService.queryUserAndAddressByIds(ids);
    }
 @Override
    public List<UserVO> queryUserAndAddressByIds(List<Long> ids) {
        //1.查询用户
        List<User> users = listByIds(ids);
        if (CollUtil.isEmpty(users)){
            return Collections.emptyList();
        }
        //2.查询地址
        //2.1获取用户id集合
        List<Long> userIds = users.stream().map(User::getId).collect(Collectors.toList());
        //2.2根据用户id查询地址
        List<Address> addresses = Db.lambdaQuery(Address.class).in(Address::getUserId, userIds).list();
        //2.3转换地址Vo
        List<AddressVO> addressVOList = BeanUtil.copyToList(addresses, AddressVO.class);
        //2.4用户地址集合分组处理,分类整理,相同用户的放入一个集合中
        Map<Long, List<AddressVO>> addressMap = new HashMap<>(0);
        if (CollUtil.isNotEmpty(addressVOList)){
             addressMap = addressVOList.stream().collect(Collectors.groupingBy(AddressVO::getUserId));//分组处理
        }

        //3.转Vo返回
        List<UserVO>list = new ArrayList<>(users.size());
        for (User user : users) {
            //3.1转User的Po为Vo
            UserVO vo = BeanUtil.copyProperties(user, UserVO.class);
            list.add(vo);
            //3.转换地址Vo
            vo.setAddresses(addressMap.get(user.getId()));
        }

        //3.2
        return list;
    }

标签:UserVO,SpringCloud,DB,用户,day04,地址,查询,List,id
From: https://blog.csdn.net/qq_50684356/article/details/139717548

相关文章

  • Influxdb安装与使用
    Influxdb安装与使用安装启动常用命令查看版本查看当前数据库的RetentionPolicies创建新的RetentionPolicies修改RetentionPolicies删除RetentionPolicies数据库导出数据库导入分组查询查询数据库占用空间安装wgethttps://dl.influxdata.com/influxdb/releases/......
  • modbus TCP 操作寄存器,控制气密性测试仪
    #include"modbus.h"#include<iostream>#pragmacomment(lib,"modbus.lib")usingnamespacestd;intmain(){  modbus_t*ctx;  constchar*ipAddress="192.168.1.2";//ModbusTCP从机的IP地址  constintport=8000;//......
  • Javaweb实现简易记事簿 jdbc实现Java连接数据库
    //相关代码packageUserAct;importjakarta.servlet.;importjakarta.servlet.annotation.WebServlet;importjakarta.servlet.http.;importjava.io.;importjava.sql.;//登出@WebServlet("/UserAct.DeleteEvent")publicclassDeleteEventimplementsServlet{......
  • 安卓自动化Tasker和Macrodroid(含ADB调试)
    1.前言首先讲讲自动化的初衷吧。我平时是很少用手机的,用手机就是拍照、聊天和看文章。我个人不是很喜欢现在的聊天方式,它不是纯粹放松的个人聊天,还夹杂学习、工作通知,通知是要看,但个人聊天我只希望在我自己想聊的时候聊,不希望我本来打开手机是要做一件正事,但是因为看到聊天弹窗......
  • go操作duckdb
    什么是duckdbDuckDB是一个开源的嵌入式SQL数据库管理系统。与传统的SQL数据库不同,DuckDB不需要一个服务器进程,也不需要在系统上安装数据库软件。它被设计为轻量级和高性能,可以轻松嵌入到应用程序中,提供完整的SQL数据库功能。以下是DuckDB的一些关键特性:1.**轻量级**:DuckDB的......
  • cadence的CDB转OA完整教学
    CDB转OA完整教学以.18um工艺库为例1.首先将CDB的.18文件解压2.新建一个.18_OA的文件夹,在文件下再新建一个OA的文件夹3.再再OA文件夹下新建一个CDB的文件夹,真的是最后一个文件夹的(咱不是在套娃)右击在CDB打开终端,现在CDB文件是空的,所以我们要添加.18的工艺库并且在CDB中......
  • 超级底层:10WQPS/PB级海量存储HBase/RocksDB,底层LSM结构是什么?
    文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录博客园版为您奉上珍贵的学习资源:免费赠送:《尼恩Java面试宝典》持续更新+史上最全+面试必备2000页+面试必备+大厂必备+涨薪必备免费赠送:《尼恩技术圣经+高并发系列PDF》,帮你实现技术自由,完成职业升级,薪......
  • Mongodb UPDATE, 使用$position指定向数组中插入新元素的位置
    学习mongodb,体会mongodb的每一个使用细节,欢迎阅读威赞的文章。这是威赞发布的第72篇mongodb技术文章,欢迎浏览本专栏威赞发布的其他文章。如果您认为我的文章对您有帮助或者解决您的问题,欢迎在文章下面点个赞,或者关注威赞。谢谢。本篇文章,我们聊聊在mongodb数组更新的操作符$po......
  • springcloud-config配置中心
    配置中心主要解决微服务数量多了之后的公共配置文件问题,比如通用配置列表之类,数据库,三方件连接参数之类。配置中心分为服务端(可集群)和客户端服务端:引入服务端依赖<dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spr......
  • JDBC入门
    JDBC简介JDBC概念JDBC就是使用Java语言操作关系型数据库的一套API全称:(JavaDataBaseConnectivity)Java数据库连接JDBC是一套标准接口,实现同一套Java代码,操作不同的关系型数据库JDBC本质官方(sun)公司定义的一套操作所有关系型数据库的规则,即接口各个数据库厂商去实现这套接口......