使用 MyBatis-Plus 实现 Lambda 分组统计

在数据分析和处理的工作中,分组统计是一项非常重要的功能。在 Java 开发中,MyBatis-Plus 可以很方便地实现这一功能。接下来,我会带领你学习如何使用 MyBatis-Plus 进行 Lambda 分组统计。

工作流程

为了帮助你更好地理解整个过程,下面是一个简单的工作流程表格:

步骤 说明
1 创建数据库表
2 配置 MyBatis-Plus
3 创建实体类
4 创建 Mapper 接口
5 编写 Lambda 分组统计的 Service 方法
6 测试并运行

Step 1: 创建数据库表

首先,你需要创建一个数据库表。假设我们有一个销售表,记录每个销售人员的销售金额。这个表可以用以下 SQL 语句创建:

CREATE TABLE sales (
    id INT PRIMARY KEY AUTO_INCREMENT,
    seller_name VARCHAR(255),
    sale_amount DECIMAL(10, 2),
    sale_date DATE
);

Step 2: 配置 MyBatis-Plus

在你的 Maven 项目中,添加 MyBatis-Plus 依赖:

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.4.3</version> <!-- 指定版本 -->
</dependency>

确保你已经在 application.ymlapplication.properties 中配置了数据库的连接信息。

Step 3: 创建实体类

创建一个实体类 Sale,与表结构相对应:

import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

@Data
@TableName("sales")
public class Sale {
    private Long id; // 销售 ID
    private String sellerName; // 销售员名字
    private BigDecimal saleAmount; // 销售金额
    private Date saleDate; // 销售日期
}

Step 4: 创建 Mapper 接口

创建 SaleMapper 接口,继承 MyBatis-Plus 的 BaseMapper

import com.baomidou.mybatisplus.core.mapper.BaseMapper;

public interface SaleMapper extends BaseMapper<Sale> {
    // 无需额外方法,继承 BaseMapper 已经提供基础操作
}

Step 5: 编写 Lambda 分组统计的方法

在你的 Service 类中,编写一个统计销售额的方法,按照销售员分组:

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;
import java.util.List;

@Service
public class SaleService extends ServiceImpl<SaleMapper, Sale> {

    public List<SaleStatisticDTO> getSalesStatistics() {
        // 创建 LambdaQueryWrapper 对象
        LambdaQueryWrapper<Sale> queryWrapper = new LambdaQueryWrapper<>();
        
        // 使用 MyBatis-Plus 的函数进行分组和统计
        return this.baseMapper.selectList(queryWrapper
            .select("seller_name, SUM(sale_amount) AS total_amount")
            .groupBy("seller_name")
        );
    }
}

这段代码定义了一个方法 getSalesStatistics(),它通过 LambdaQueryWrapper 构建 SQL 查询,以销售员名字分组并计算销售总额。

Step 6: 测试并运行

在测试类中调用上面的方法,并输出结果:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

@Component
public class ApplicationRunner implements CommandLineRunner {

    @Autowired
    private SaleService saleService;

    @Override
    public void run(String... args) throws Exception {
        List<SaleStatisticDTO> stats = saleService.getSalesStatistics();
        stats.forEach(stat -> {
            System.out.println(stat.getSellerName() + ": " + stat.getTotalAmount());
        });
    }
}

旅行图

在整个过程中,你的开发旅程如下所示:

journey
    title MyBatis-Plus Lambda 分组统计之旅
    section 创建数据库表
      创建销售表: 5: Seller
    section 配置 MyBatis-Plus
      添加 Maven 依赖: 3: Developer
    section 创建实体类
      编写 Sale 类: 4: Developer
    section 创建 Mapper 接口
      编写 SaleMapper: 4: Developer
    section 编写 Service 方法
      实现分组统计: 5: Developer
    section 测试并运行
      验证输出结果: 5: Developer

结尾

至此,你已经了解了如何在 Java 项目中使用 MyBatis-Plus 进行 Lambda 分组统计。通过这个过程,你学会了如何创建数据库、配置 MyBatis-Plus、编写实体类、Mapper 接口以及统计功能的方法。希望这些知识能帮助你在今后的开发工作中更加游刃有余!如果你有任何问题,欢迎随时问我。