MybatisPlus——静态工具查询
主要作用:避免循环依赖
例如:
1.查询用户的接口,查询出用户的同时,查询出用户对应的所有地址
2.批量查询用户的接口,查询用户的同时,查询出用户对应的所有地址
如果要实现上述功能,那么在查询用户表的时候还要注入地址表,查询地址表的时候还要注入用户表,这样就形成了循环依赖,而利用静态工具类进行的查询,就可以解决这个问题。
首先,这是两张表的结构:
1.查询用户的接口,查询出用户的同时,查询出用户对应的所有地址
@Override
public void selectUserAddressById(Long id) {
// 查询用户
User user = this.getById(id);
if (user == null){
throw new RuntimeException("用户不存在");
}
// 查询用户地址
// 引用MybatisPlus的
List<TOrder> list = Db.lambdaQuery(TOrder.class).eq(TOrder::getUserId, id).list();
System.out.println(list);
}
2.批量查询用户的接口,查询用户的同时,查询出用户对应的所有地址
@Override
public List<TOrder> findAddressByIds(List<Integer> ids) {
// 查询用户
List<User> users = this.listByIds(ids);
if (users.size() == 0){
throw new RuntimeException("用户不存在");
}
// 获取用户id集合
List<Integer> userIds = users.stream().map(User::getId).collect(Collectors.toList());
// 查询用户地址
List<TOrder> list = Db.lambdaQuery(TOrder.class).in(TOrder::getUserId, userIds).list();
// 对用户集合进行分组处理,同一用户的放在一起
Map<Integer, List<TOrder>> collect = new HashMap<>(0);
if (CollectionUtils.isEmpty(list)) {
collect = list.stream().collect(Collectors.groupingBy(TOrder::getUserId));
}
// 获取用户地址
List<TOrder> tOrders = collect.get(userIds);
return tOrders;