用mybatis-plus写SELECT book_id, sum(quantity) as sales FROM orders GROUP BY book_id ORDER BY sales DESC
时间: 2023-12-25 14:03:58 浏览: 25
好的,这是用MyBatis-Plus实现查询语句的代码:
```java
QueryWrapper<Orders> queryWrapper = new QueryWrapper<>();
queryWrapper.select("book_id", "sum(quantity) as sales")
.groupBy("book_id")
.orderByDesc("sales");
List<Map<String, Object>> result = ordersMapper.selectMaps(queryWrapper);
```
其中,`Orders`是你的订单实体类,`ordersMapper`是你的订单Mapper,可以通过`@Mapper`注解或者XML配置进行定义。
这里使用了`QueryWrapper`来构建查询条件,`select`方法用于设置需要查询的列,`groupBy`方法用于设置分组的列,`orderByDesc`方法用于设置按照`sales`列降序排序。
最后,使用`selectMaps`方法进行查询,并返回结果集合。结果集合中的每个元素是一个`Map`对象,其中包含了`book_id`和`sales`两个键值对,分别对应查询结果中的两个列。
相关问题
Mybatis-Plus 3.4.3没有ID_WORKER
Mybatis-Plus 3.4.3 已经支持了 ID_WORKER,可以在实体类中使用 `@TableId(type = IdType.ASSIGN_ID)` 来自动填充 ID_WORKER,示例如下:
```java
@Data
public class User {
@TableId(type = IdType.ASSIGN_ID)
private Long id;
private String name;
private Integer age;
}
```
在插入数据时,Mybatis-Plus 会自动填充 ID_WORKER 类型的主键。如果需要手动设置主键,可以使用 `setId()` 方法来设置主键值。
mybatis-plus中使用FIND_IN_SET函数
在MyBatis-Plus中使用FIND_IN_SET函数可以通过使用Lambda表达式来实现。Lambda表达式是MyBatis-Plus提供的一种方便的查询方式,可以通过链式调用来构建查询条件。下面是一个使用Lambda表达式实现FIND_IN_SET函数的示例:
```java
// 假设我们要查询label字段中包含指定tag的记录
String tag = "tag1";
QueryWrapper<Activities> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().apply("FIND_IN_SET('" + tag + "', label) > 0");
List<Activities> activitiesList = activitiesMapper.selectList(queryWrapper);
```
在上面的示例中,我们使用lambda()方法获取LambdaQueryWrapper对象,然后使用apply()方法来添加FIND_IN_SET函数的查询条件。其中,apply()方法的参数是一个字符串,表示要添加的查询条件。在这个字符串中,我们使用单引号将tag括起来,并使用FIND_IN_SET函数来判断tag是否在label字段中。如果tag在label字段中,则返回值大于0,否则返回值等于0。
需要注意的是,FIND_IN_SET函数的参数顺序是先传入要查找的值,再传入要查找的数组。在MyBatis-Plus中,我们可以使用apply()方法来手动拼接SQL语句,从而实现FIND_IN_SET函数的查询。