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