mybatis写一个分组查询
时间: 2023-11-29 09:58:06 浏览: 71
MyBatis-Plus 查询返回实体对象还是map
假设我们有一个订单表(order),其中包含订单号(order_id)、客户ID(customer_id)、订单金额(amount)等字段。现在我们想要统计每个客户的订单总金额,并按照金额从高到低排序。
我们可以使用MyBatis的注解@Select来编写分组查询的SQL语句,并将查询结果映射到一个自定义的实体类中。下面是代码示例:
```java
public interface OrderMapper {
@Select("SELECT customer_id, SUM(amount) AS total_amount FROM order GROUP BY customer_id ORDER BY total_amount DESC")
@Results(id = "orderResultMap", value = {
@Result(property = "customerId", column = "customer_id"),
@Result(property = "totalAmount", column = "total_amount")
})
List<CustomerOrder> groupByCustomer();
}
public class CustomerOrder {
private String customerId;
private BigDecimal totalAmount;
// getter and setter
}
```
在这个示例中,我们使用了@Select注解来定义SQL语句,并使用@Results注解来指定查询结果的映射关系。我们定义了一个自定义的实体类CustomerOrder,其中包含了客户ID和订单总金额两个字段。在SQL语句中,我们使用了聚合函数SUM来统计每个客户的订单总金额,并使用GROUP BY子句按照客户ID进行分组。最后,我们使用ORDER BY子句按照订单总金额从高到低排序。
阅读全文