{"id":27456877,"url":"https://github.com/airpowerteam/airpower4j","last_synced_at":"2026-01-06T11:19:27.421Z","repository":{"id":185336979,"uuid":"671284719","full_name":"AirPowerTeam/AirPower4J","owner":"AirPowerTeam","description":"🔥🔥🔥AirPower4J是一个基于 Java17、SpringBoot3.x、JPA\u0026MySQL 的后端开发脚手架，其中包含了一些 RBAC、请求验证、CURD封装、异常处理、多租户SaaS、加解密与安全、WebSocket等模块，以满足日常开发的快捷、稳健、标准化等要求。","archived":false,"fork":false,"pushed_at":"2025-04-10T10:51:03.000Z","size":1789,"stargazers_count":62,"open_issues_count":0,"forks_count":13,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-10T11:45:40.236Z","etag":null,"topics":["api","backend","java","jpa","oauth2","spring-boot"],"latest_commit_sha":null,"homepage":"https://hamm.cn","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AirPowerTeam.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-07-27T01:24:17.000Z","updated_at":"2025-04-10T10:51:07.000Z","dependencies_parsed_at":"2023-08-01T15:09:35.939Z","dependency_job_id":"431df63d-485a-414c-b78d-5827559bcd25","html_url":"https://github.com/AirPowerTeam/AirPower4J","commit_stats":null,"previous_names":["hammcn/cn.hamm.airpower","hammcn/airpower4j","airpowerteam/airpower4j"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AirPowerTeam%2FAirPower4J","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AirPowerTeam%2FAirPower4J/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AirPowerTeam%2FAirPower4J/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AirPowerTeam%2FAirPower4J/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AirPowerTeam","download_url":"https://codeload.github.com/AirPowerTeam/AirPower4J/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249129400,"owners_count":21217352,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","backend","java","jpa","oauth2","spring-boot"],"created_at":"2025-04-15T18:31:20.494Z","updated_at":"2026-01-06T11:19:27.414Z","avatar_url":"https://github.com/AirPowerTeam.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003c!--suppress HtmlRequiredAltAttribute --\u003e\n\u003cimg width=\"300\" src=\"docs/img/airpower-bg.svg\"/\u003e \u003cb\u003e4J\u003c/b\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://svg.hamm.cn?key=Lang\u0026value=Java17\u0026bg=green\"/\u003e\n  \u003cimg src=\"https://svg.hamm.cn?key=Base\u0026value=SpringBoot3\"/\u003e\n  \u003cimg src=\"https://svg.hamm.cn?key=ORM\u0026value=JPA\"/\u003e\n  \u003cimg src=\"https://svg.hamm.cn?key=DB\u0026value=MySQL\"/\u003e\n  \u003cimg src=\"https://img.shields.io/maven-metadata/v.svg?label=Maven%20Central\u0026metadataUrl=https%3A%2F%2Frepo1.maven.org%2Fmaven2%2Fcn%2Fhamm%2Fairpower%2Fmaven-metadata.xml\"/\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n\u003ca href=\"https://github.com/AirPowerTeam/AirPower4J\"\u003eGitHub\u003c/a\u003e / \u003ca href=\"https://gitee.com/air-power/AirPower4J\"\u003eGitee\u003c/a\u003e / \u003ca href=\"https://central.sonatype.com/namespace/cn.hamm\"\u003eMaven\u003c/a\u003e\n\u003c/p\u003e\n\n## 📖 一、这是个什么项目\n\n为了满足开发标准化、工程化、系统化等等需求，我们设计并开发了一个基于 **Java17**、**SpringBoot3.x**、**JPA\u0026MySQL**\n的后端开发脚手架，其中包含了一些 **RBAC**、**请求验证**、**CURD封装**、**异常处理**、**多租户SaaS**、**加解密与安全**、\n**WebSocket**等模块，以满足日常开发的快捷、稳健、标准化等要求。\n\n当然，\n\n\u003e 如果你对全栈感兴趣，也可以和我们的 **`@airpower/web`**\n\u003e （[Github](https://github.com/AirPowerTeam/AirPower-Web)/[Gitee](https://gitee.com/air-power/AirPower-Web\n)） 一起玩耍，\n`@airpower/web`\n\u003e 是一个基于 `Vue3`/`TypeScript`/`ElementPlus`/`Vite` 等技术栈的一个基础开发脚手架，`AirPower4J`和`@airpower/web`\n\u003e 的联合可以为你的全栈之路增加另外一份很不一样的开发体验。\n\n## 🔑 二、如何使用(初始化)?\n\n你可以使用 `maven` 来引入这个依赖包：\n\n```xml\n\u003c!-- 指定你的项目的父级 pom 文件 --\u003e\n\u003cparent\u003e\n    \u003cgroupId\u003ecn.hamm\u003c/groupId\u003e\n    \u003cartifactId\u003eairpower\u003c/artifactId\u003e\n    \u003cversion\u003e${VERSION}\u003c/version\u003e\n\u003c/parent\u003e\n\u003cdependencies\u003e\n\u003cdependency\u003e\n    \u003cgroupId\u003ecn.hamm\u003c/groupId\u003e\n    \u003cartifactId\u003eairpower-core\u003c/artifactId\u003e\n\u003c/dependency\u003e\n\u003c/dependencies\u003e\n```\n\n## 💐 三、项目架构\n\n### 1. 环境变量说明\n\n我们使用了 `JPA` 的自动初始化数据库 `ddl-auto: create-drop` 模式，所以你在此项目中看不到SQL文件。\n\n所以在初始化代码库完成后只需要先创建数据库，并设置 `utf8mb4_unicode_ci` 字符集。\n\n接下来在环境变量中配置 `ddl-auto: create-drop` 即可。\n\n\u003e 请注意，生产环境请勿使用这种方式。\n\n### 2. 基本架构说明\n\n我们使用标准的 `Controller`/`Service`/`Repository` 架构，原则上不涉及 `EO`/`VO`/`DTO` 等，整个项目使用 `Entity` 作为数据结构。\n\n\u003e 一些比较特殊的需求除外。\n\n### 3. 注解\n\n我们提供了一系列的注解：\n\n#### 3.1 `@Api`\n\n标记为 API 控制器方法，等同于 `@RequestMapping` + `@RestController` 的整合。\n\n#### 3.2 `@Description`\n\n类或属性的文案，将显示在错误信息、验证信息等处。\n\n#### 3.3 `@Desensitize` 与 `@DesensitizeIgnore`\n\n标记脱敏字段和不脱敏的接口。\n\n#### 3.4 `@Export`\n\n标记为导出列，可配置导出列的数据类型。\n\n#### 3.5 `@ReadOnly`\n\n可为属性标记 `@ReadOnly` 表示该属性不参与控制器修改。\n\n#### 3.6 `@Extends`\n\n标记控制器需要从父类控制器中继承或排除哪些方法。\n\n#### 3.7 `@Search`\n\n属性本身可参与强匹配搜索，可通过 `@Search` 注解标记为可模糊搜索的属性。\n\n#### 3.8 `@Dictionary`\n\n标记为字典属性，可使用下方 `4` 中的枚举字典接口的实现类。\n\n### 4. 枚举字典\n\n枚举字典需要实现 `IDictionary` 接口，即可使用 `3.9` 中的注解对属性进行标记，会自动进行判断和翻译。\n\n### 5. `RootModel` 超类模型\n\n所有参与API数据交互的部分都需要继承 `RootModel`, 一切需要入库的数据都需要继承 `RootEntity`。\n\n### 6. `API` 控制器超类 和 `CURD` 控制器\n\n所有控制器均需要继承 `ApiController`，其中，如果是数据库相关的控制器，需要继承 `CurdController`。\n\n同时，如果是 `Curd` 相关业务的业务，可以继承和实现 `CurdService` 和 `ICurdRepository`\n\n### 7. 自定义异常\n\n自定义异常需要实现 `IException` 接口，即可使用异常的快捷抛出等方法。\n\n### 8. 标准树\n\n实现了 `ITree` 的类都可实现标准的树结构，可使用 `TreeUtil` 的一系列方法。\n\n### 9. 系统配置\n\n所有的服务配置都可通过环境变量注入，只需要在配置文件 `application-xxx.yml` 中根配置 `airpower.` 就可以全看到啦。\n\n### 9. `Utils`\n\n提供了大量的工具包以供使用，可以查看 `cn.hamm.airpower.core` 包下的类，也可以直接使用 `Utils.getXXX()` 直接获取工具类使用。\n\n## 🛎 四、问题反馈与建议\n\n如果你有什么疑问或者问题，你也可以加入开发者交流QQ群(```555156313```)\n进行咨询，当然，我们更建议你发起 [Github issue](https://github.com/AirPowerTeam/AirPower4J/issues/new) / [Gitee issue](https://gitee.com/air-power/AirPower4J/issues/new)\n\n## ⏰ 五、Enjoy it\n\n好了, 那么接下来你可以愉快地开发了, 如果你有什么建议或者意见, 可以在本仓库中提交你的 **issues**, 你可以为这个依赖库进行\n**添砖加瓦**!\n\n\u003e ☕️Java: 加瓦? 什么Java?\n\n## 🎱 六、服务中的企业/用户\n\n**AirPower4J** 正在为以下的公司/用户提供技术支持:\n\n- **杭州某财税网络科技有限公司**\n\n- **重庆某工业互联网科技有限公司**\n\n\u003e 如果你的公司/企业正在使用我们的服务，欢迎通过 `Issues` 提交，我们将在上面的列表中列出。\n\n---\n\n\u003cp align=\"center\"\u003e\nATTENTION: Contributor list is just for fun!!!\n\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fairpowerteam%2Fairpower4j","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fairpowerteam%2Fairpower4j","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fairpowerteam%2Fairpower4j/lists"}