mybatisPlus 条件查询和分组查询结合使用返回多条数据
时间: 2023-06-21 16:24:17 浏览: 275
可以使用 MyBatis-Plus 的 QueryWrapper 类来实现条件查询和分组查询结合使用,返回多条数据的功能。
示例代码如下:
```java
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.select("age", "count(*) as count")
.groupBy("age")
.having("count > 1");
List<Map<String, Object>> list = userMapper.selectMaps(wrapper);
```
上述代码中,我们使用 `QueryWrapper` 对象设置了查询条件和分组条件,并使用 `selectMaps` 方法查询符合条件的数据,返回一个 `List<Map<String, Object>>` 类型的结果集,其中每个 Map 对象表示一条记录,包含查询的字段和对应的值。
需要注意的是,使用 `selectMaps` 方法只能查询指定的字段,并将它们作为 Map 对象的键值对返回。如果需要查询所有字段,可以使用 `selectList` 方法,它将返回一个包含实体类对象的 List 集合。
相关问题
mybatisPlus 条件查询和分组查询结合使用
MybatisPlus 条件查询和分组查询结合使用可以通过使用 Wrapper 来实现。以下是示例代码:
```java
QueryWrapper<Entity> wrapper = new QueryWrapper<>();
wrapper.eq("field1", value1)
.eq("field2", value2)
.groupBy("group_field")
.having("SUM(having_field) > 10");
List<Entity> list = entityMapper.selectList(wrapper);
```
在上述示例中,我们定义了一个 QueryWrapper 对象,并使用 eq 方法添加了两个等值条件。然后,我们使用 groupBy 方法指定了分组字段,并使用 having 方法添加了一个聚合函数过滤条件。最后,我们使用 selectList 方法执行查询,并将结果存储在一个 Entity 类型的 List 中。
需要注意的是,如果使用了分组查询,那么查询结果中只会包含分组字段和聚合函数字段。如果需要查询其他字段,可以使用 select 方法进行指定。
shardingsphere 使用 mybatisplus 实现分组后查询每组最新一条数据
可以使用ShardingSphere的聚合函数和子查询来实现分组后查询每组最新一条数据。
假设有以下表结构:
```
CREATE TABLE `t_order` (
`order_id` bigint(20) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`create_time` datetime NOT NULL,
PRIMARY KEY (`order_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
```
可以按照以下步骤来实现分组后查询每组最新一条数据:
1. 使用MybatisPlus的Wrapper对象构造查询条件,按照user_id分组并求出每组最大的create_time:
```java
QueryWrapper<Order> wrapper = new QueryWrapper<>();
wrapper.select("user_id", "MAX(create_time) as max_create_time");
wrapper.groupBy("user_id");
```
2. 将上一步查询结果作为子查询,根据user_id和create_time查询最新一条记录:
```java
QueryWrapper<Order> wrapper2 = new QueryWrapper<>();
wrapper2.inSql("concat(user_id, ',', create_time)", "select concat(user_id, ',', max_create_time) from t_order group by user_id");
List<Order> orders = orderMapper.selectList(wrapper2);
```
这里使用了concat函数把user_id和create_time拼接成一个字符串,然后再跟子查询中的结果进行匹配,从而查询到最新的一条记录。
阅读全文