不冷博客

记录一下学习黑马程序员两个Vo结合时候老师提到的另一种方法

业务逻辑就是
有两张表,用户表和地址表,通过地址表中有userId可以知道地址对应的哪个用户
然后看一下Controller

    @GetMapping("/getAddress")
    @ApiOperation("根据id批量查询用户和地址")
    //@RequestParam注解的作用是获取请求参数
    public List<UserVO> queryUserAndAddressByIds(@ApiParam(value = "用户id集合", required = true)@RequestParam("ids") List<Long> ids){
        // 1.查询用户
        List<UserVO> users = userService.queryUserAndAddressByIds(ids);
        // 2.处理vo
        return users;
    }

这里的大差不差,
那么先看一下老师对Impl里面写的代码,我觉得这里太繁琐了,不过老师讲了这样性能会更好,
代码只是部分,后面还有stream流的没截图

然后看一下我的版本(按照老师提到的先查询到所有的用户,再通过用户去查地址)

    @Override
    public List<UserVO> queryUserAndAddressByIds(List<Long> ids) {
        //批量查询到用户
        List<User> users = listByIds(ids);
//        List<User> userList = lambdaQuery()
//                .in(User::getId, ids)
//                .list();
        if (CollUtil.isEmpty(users)){
            throw new RuntimeException("用户不存在");
        }
        //把user转为UserVo
        List<UserVO> userVOS = BeanUtil.copyToList(users, UserVO.class);
        //把地址转化为地址的AddressVo然后赋值给users
        userVOS.forEach(user -> {
            //批量查询到地址
            List<Address> addresses = Db.lambdaQuery(Address.class)
                    .in(Address::getUserId, ids)
                    .eq(Address::getUserId, user.getId())
                    .list();
            user.setAddresses(BeanUtil.copyToList(addresses, AddressVO.class));
        });

        return userVOS;
    }

当然,实现结果是一样的,仅供参考哈!勿喷!

当前页面是本站的「Google AMP」版。查看和发表评论请点击:完整版 »