QueryWrapper加stream
时间: 2023-11-15 10:44:03 浏览: 33
您好!对于QueryWrapper加stream的使用,您可以通过以下步骤进行操作:
1. 首先,您需要引入QueryWrapper和Stream相关的类和方法。在Java中,您可以使用以下代码导入这些类:
```java
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import java.util.stream.Stream;
```
2. 接下来,您可以创建一个QueryWrapper对象,并使用它来设置查询条件。例如,假设您要查询age大于等于18
相关问题
QueryWrapper<Entity> queryWrapper = new QueryWrapper<>(); sum
在使用 MyBatis-Plus 的 QueryWrapper 进行查询并获取某个字段的总和时,可以使用 `sum()` 方法。以下是一个示例代码:
```java
QueryWrapper<Entity> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("column1", value1)
.ne("column2", value2);
BigDecimal sum = mapper.selectObjs(queryWrapper).stream()
.map(obj -> (BigDecimal) obj)
.reduce(BigDecimal.ZERO, BigDecimal::add);
System.out.println("字段 column3 的总和:" + sum);
```
在上面的示例中,我们首先创建了一个 QueryWrapper 对象 `queryWrapper`,然后使用 `eq()` 方法设置等于条件和 `ne()` 方法设置不等于条件。你可以根据具体的需求添加更多的查询条件。
接着,我们使用 `mapper.selectObjs(queryWrapper)` 方法来执行查询,并通过 `stream()` 方法将查询结果转为流。然后,我们使用 `map()` 方法将查询结果转为 BigDecimal 类型,并使用 `reduce()` 方法对所有结果进行求和操作。
最后,我们通过打印输出的方式显示字段 column3 的总和。
需要注意的是,`selectObjs()` 方法是 MyBatis-Plus 提供的方法,需要根据你的具体情况调用对应的 Mapper 接口中的方法来执行查询。
运行以上代码,将会输出:
```
字段 column3 的总和:100.00
```
这样就可以获取到字段 column3 的总和,并进行相应的处理。
MyBatis Plus用QueryWrapper进行四表联查
MyBatis Plus的QueryWrapper可以方便地进行多表查询,以下是一个四表联查的示例:
假设我们有四张表,分别是user、order、order_item和product,它们的关系如下:
user(用户表):id、name、age、gender
order(订单表):id、user_id、order_time
order_item(订单项表):id、order_id、product_id、quantity、price
product(商品表):id、name、price
我们需要查询某个用户的所有订单以及订单项和商品信息。可以使用以下代码:
```java
QueryWrapper<User> userWrapper = new QueryWrapper<>();
userWrapper.eq("id", userId);
QueryWrapper<Order> orderWrapper = new QueryWrapper<>();
orderWrapper.eq("user_id", userId);
QueryWrapper<OrderItem> orderItemWrapper = new QueryWrapper<>();
orderItemWrapper.inSql("order_id", "SELECT id FROM order WHERE user_id = " + userId);
QueryWrapper<Product> productWrapper = new QueryWrapper<>();
productWrapper.inSql("id", "SELECT product_id FROM order_item WHERE order_id IN (SELECT id FROM order WHERE user_id = " + userId + ")");
List<Order> orderList = orderMapper.selectList(orderWrapper);
List<OrderItem> orderItemList = orderItemMapper.selectList(orderItemWrapper);
List<Product> productList = productMapper.selectList(productWrapper);
for (Order order : orderList) {
List<OrderItem> items = orderItemList.stream().filter(item -> item.getOrderId().equals(order.getId())).collect(Collectors.toList());
order.setOrderItems(items);
for (OrderItem item : items) {
Product product = productList.stream().filter(p -> p.getId().equals(item.getProductId())).findFirst().orElse(null);
item.setProduct(product);
}
}
User user = userMapper.selectOne(userWrapper);
user.setOrders(orderList);
return user;
```
首先,我们使用一个QueryWrapper<User>来查询指定用户,然后使用一个QueryWrapper<Order>来查询该用户的所有订单,使用一个QueryWrapper<OrderItem>来查询该用户的所有订单项,最后使用一个QueryWrapper<Product>来查询所有订单项对应的商品信息。
注意,由于order_item表中的order_id和product_id是外键,不能直接使用eq方法,需要使用inSql方法来查询。
最后,我们可以将查询到的结果组装成一个User对象返回。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)