# Spring Boot Service Template 微服务快速开发能力模板,提供标准化的能力模块,帮助开发者快速构建 Spring Boot 微服务应用。 **当前版本**: 1.1.0-SNAPSHOT ## 1. 项目概述 Spring Boot Service Template 是一个能力模块化的微服务开发模板。每个能力模块封装特定领域的通用功能,开发者只需引入依赖、实现少量代码即可获得完整的业务能力。 **核心价值**: - 能力模块化:每个模块独立可用,按需引入 - 零样板代码:通用逻辑已封装,专注业务实现 - 多实现支持:同一能力支持多种技术实现,灵活选择 ## 2. 架构 ``` ┌─────────────────────────────────────────────────────────────────────┐ │ Spring Boot Service Template │ ├─────────────────────────────────────────────────────────────────────┤ │ │ │ ┌──────────────────────────────────────────────────────────────┐ │ │ │ 能力模块 (Capability) │ │ │ │ │ │ │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │ │ │ database │ │ user │ │ payment │ ... │ │ │ │ │ ✅ 已实现 │ │ 🔜 规划中 │ │ 🔜 规划中 │ │ │ │ │ └──────┬──────┘ └─────────────┘ └─────────────┘ │ │ │ │ │ │ │ │ │ ▼ │ │ │ │ ┌─────────────────────────────────────────────┐ │ │ │ │ │ jpa │ eq │ xbatis (实现) │ │ │ │ │ └─────────────────────────────────────────────┘ │ │ │ └──────────────────────────────────────────────────────────────┘ │ │ │ │ ┌──────────────────────────────────────────────────────────────┐ │ │ │ 通用基础 (Common) │ │ │ │ │ │ │ │ ObjectHelper (对象工具) │ SnowflakeHelper (ID生成) │ │ │ └──────────────────────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────────────┘ ``` **模块依赖关系**: ``` ┌─────────────┐ │ 应用 │ └──────┬──────┘ │ ▼ ┌─────────────────┐ ┌───────────────────┐ │ capability-common│────▶│ capability-impl │ │ (接口定义) │ │ (jpa/eq/xbatis) │ └───────┬─────────┘ └───────────────────┘ │ ▼ ┌─────────────┐ │ common │ │ (通用工具) │ └─────────────┘ ``` ## 3. 通用规范 ### 3.1 模块命名 | 模块类型 | 命名格式 | 示例 | |---------|---------|------| | 能力模块 | `spring-boot-service-template-{capability}` | database | | 通用定义 | `spring-boot-service-template-{capability}-common` | database-common | | 具体实现 | `spring-boot-service-template-{capability}-{impl}` | database-jpa | | 通用基础 | `spring-boot-service-template-common` | common | ### 3.2 依赖原则 - **common 模块**:与业务无关的工具类,不依赖任何能力模块 - **capability-common**:定义接口和通用实体,不依赖具体实现技术 - **最小化第三方依赖**:优先使用 JDK 和 Spring 内置能力 ### 3.3 响应格式 所有 API 使用统一的 `GlobalResponse` 格式: ```json { "status": 0, "message": "OK", "data": { ... } } ``` | 字段 | 说明 | |-----|------| | status | 状态码:0=成功,500=错误 | | message | 描述信息 | | data | 业务数据 | 列表数据封装: ```json { "status": 0, "message": "OK", "data": { "items": [...], "total": 100 } } ``` ### 3.4 代码风格 - **接口与实现分离**:接口定义在 `*-common`,实现在具体模块 - **空值检查**:使用 `ObjectHelper.isNull/isNotNull/isEmpty/isNotEmpty` - **异常定义**:继承 `RuntimeException`,构造器接收业务参数 - **注解使用**:`@Getter` / `@Setter` / `@FieldNameConstants` / `@NoArgsConstructor` ## 4. 能力模块 ### 4.1 database 模块 单表 CRUD → REST 接口的快速实现,支持三种数据库访问方式。 #### 模块概述 | 功能 | 说明 | |-----|------| | 保存 | 单条/批量保存,自动判断新增/更新 | | 查询 | 详情查询、列表查询、分页查询、条件查询 | | 删除 | 单条/批量删除 | #### 实现方式对比 | 特性 | JPA | Easy Query | Xbatis | |-----|-----|------------|--------| | 类型安全查询 | ✅ QueryDSL | ✅ Proxy API | ❌ | | 自动审计 | ✅ | ❌ | ❌ | | 逻辑删除 | ❌ | ✅ | ✅ | | 复杂 SQL | 中等 | 中等 | 强 | | 适用场景 | 标准 JPA 项目 | 类型安全 + 逻辑删除 | 复杂查询场景 | #### 快速开始 **1. 添加依赖** ```xml com.lanyuanxiaoyao spring-boot-service-template-database-jpa 1.1.0-SNAPSHOT ``` **2. 实现 CRUD 的 5 个步骤** 参考测试代码:`spring-boot-service-template-database-jpa/src/test/java/.../` | 步骤 | 说明 | 参考文件 | |-----|------|---------| | 1. 创建实体 | 继承 `SimpleEntity` | `entity/Employee.java` | | 2. 创建 Repository | 继承 `SimpleRepository` | `repository/EmployeeRepository.java` | | 3. 创建 Service | 继承 `SimpleServiceSupport` | `service/EmployeeService.java` | | 4. 创建 DTO | 定义 SaveItem, ListItem, DetailItem | `controller/EmployeeController.java` | | 5. 创建 Controller | 继承 `SimpleControllerSupport`,实现 3 个 Mapper | `controller/EmployeeController.java` | **3. 查询条件语法** ```json { "query": { "equal": { "name": "张三" }, "like": { "name": "%张%" }, "contain": { "name": "张" }, "startWith": { "name": "张" }, "endWith": { "name": "三" }, "great": { "age": 18 }, "less": { "age": 60 }, "greatEqual": { "age": 18 }, "lessEqual": { "age": 60 }, "between": { "age": { "start": 18, "end": 60 } }, "inside": { "id": [1, 2, 3] }, "notInside": { "id": [1, 2, 3] }, "nullEqual": ["deletedTime"], "notNullEqual": ["name"] }, "sort": [{ "column": "createdTime", "direction": "DESC" }], "page": { "index": 1, "size": 10 } } ``` #### 模块特定规范 **分层结构**: ``` Controller (HTTP处理、DTO转换) │ ▼ Service (业务逻辑、事务管理) │ ▼ Repository/Mapper (数据访问) │ ▼ Entity (数据模型) ``` **泛型参数**: - `ENTITY` - 实体类型 - `SAVE_ITEM` - 保存请求 DTO - `LIST_ITEM` - 列表响应 DTO - `DETAIL_ITEM` - 详情响应 DTO **实体继承**: - JPA: `IdOnlyEntity` → `SimpleEntity` → 业务实体 - EQ/Xbatis: `IdOnlyEntity` → `SimpleEntity` 或 `LogicDeleteEntity` ### 4.2 user 模块 🚧 规划中... ### 4.3 payment 模块 🚧 规划中... ## 5. 技术栈 | 组件 | 版本 | |-----|------| | Java | 17 | | Spring Boot | 4.0.0 | | Spring Cloud | 2025.1.0 | | Hibernate | 7.1.8.Final | | QueryDSL | 7.1 | | Easy Query | 3.1.68 | | Xbatis | 1.9.7-spring-boot4 | | Lombok | - | | MapStruct | 1.6.3 | ## 6. 开发与测试 **构建项目**: ```bash mvn clean package ``` **运行测试**: ```bash mvn test ``` 测试使用 H2 内存数据库,无需额外配置。 ## 7. 文档索引 - 详细文档:`docs/` 目录 - 测试示例:各模块的 `src/test/java/` 目录