业务逻辑就是
有两张表,用户表和地址表,通过地址表中有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;
}
当然,实现结果是一样的,仅供参考哈!勿喷!
版权属于:不冷
本文链接:https://www.buleng.xyz/archives/225/
转载时须注明出处及本声明
怎么收藏这篇文章?