Skip to content

Commit 024553c

Browse files
committed
fix: 修正 Flexmodel 目录名称及更新 README 文档
- 将 isFlexModelPath 方法重命名为 isFlexmodelPath,确保一致性 - 更新 README.md,增加 Java SDK 特性描述和使用示例 - 修改 variables.json 中的描述字段,简化为 "Java SDK" - 在 RecordsApi.java 中新增 listRecordsAsList 方法,支持直接返回实体列表
1 parent fc8dd96 commit 024553c

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+3912
-13
lines changed

src/main/java/tech/wetech/flexmodel/codegen/CodeGenerationService.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@ private void outputFiles(GroovyClassLoader classLoader, GenerationContext contex
189189

190190
private void outFile(GroovyClassLoader classLoader, GenerationContext context, String sourceDirectory, String targetDirectory, List<File> outputFiles, Path path) throws Exception {
191191
// Skip .flexmodel directory and its contents
192-
if (isFlexModelPath(path)) {
192+
if (isFlexmodelPath(path)) {
193193
return;
194194
}
195195

@@ -253,7 +253,7 @@ private String resolveTargetPath(String sourcePath, GenerationContext context, S
253253
/**
254254
* Check if the path is within .flexmodel directory
255255
*/
256-
private boolean isFlexModelPath(Path path) {
256+
private boolean isFlexmodelPath(Path path) {
257257
String pathString = path.toString().replace("\\", "/");
258258
return pathString.contains("/.flexmodel/") || pathString.endsWith("/.flexmodel");
259259
}

src/main/templates/java_sdk/.flexmodel/variables.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"packageName": "com.example",
33
"path": "com/example",
44
"projectName": "java-sdk",
5-
"description": "Java SDK Sample",
5+
"description": "Java SDK",
66
"version": "1.0.0",
77
"groupId": "com.example",
88
"artifactId": "java-sdk-sample"
Lines changed: 146 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,150 @@
1-
Flexmodel Java SDK 模板
1+
# Flexmodel Java SDK 模板
22

3-
该模板提供访问 Flexmodel 后端的简易 Java SDK,覆盖模型数据记录 CRUD 接口
3+
该模板提供访问 Flexmodel 后端的简易 Java SDK,支持直接访问实体类型,无需通用封装
44

5-
快速开始:
6-
- 设置占位变量 groupId、artifactId、version。
7-
- 使用 ApiClient 与 RecordsApi 调用接口。
5+
## 特性
6+
7+
- **直接实体访问**`List<User> listUsers()` 而不是 `ApiResponse<PageResult<Map<String, Object>>>`
8+
- **类型安全**:强类型实体类,编译时类型检查
9+
- **便捷API**:为每个实体生成专门的API类
10+
- **灵活查询**:支持分页、过滤、排序等查询参数
11+
- **简单易用**:工厂模式创建客户端,一行代码开始使用
12+
13+
## 快速开始
14+
15+
### 1. 创建客户端
16+
17+
```java
18+
// 使用工厂方法创建客户端
19+
FlexmodelClient client = FlexmodelClientFactory.createClient(
20+
"http://localhost:8080",
21+
"myDatasource"
22+
);
23+
24+
// 或者手动创建
25+
ApiClient apiClient = new ApiClient("http://localhost:8080");
26+
FlexmodelClient client = new FlexmodelClient(apiClient, "myDatasource");
27+
```
28+
29+
### 2. 直接访问实体
30+
31+
```java
32+
// 获取用户API(示例)
33+
UserApi userApi = client.users();
34+
35+
// 获取所有用户 - 直接返回List<User>
36+
List<User> users = userApi.listUsers();
37+
38+
// 带条件查询
39+
List<User> activeUsers = userApi.listUsers("status='active'", null, "name asc");
40+
41+
// 分页查询
42+
PageResult<User> userPage = userApi.listUsers(1, 10, null, null, null);
43+
44+
// 获取单个用户
45+
User user = userApi.getUser("123");
46+
47+
// 创建用户
48+
User newUser = new User();
49+
newUser.setName("张三");
50+
newUser.setEmail("[email protected]");
51+
User createdUser = userApi.createUser(newUser);
52+
53+
// 更新用户
54+
user.setAge(26);
55+
User updatedUser = userApi.updateUser(user.getId(), user);
56+
57+
// 删除用户
58+
userApi.deleteUser(user.getId());
59+
```
60+
61+
### 3. 访问多个实体
62+
63+
```java
64+
// 用户相关操作(示例)
65+
UserApi userApi = client.users();
66+
List<User> users = userApi.listUsers();
67+
68+
// 产品相关操作(示例)
69+
ProductApi productApi = client.products();
70+
List<Product> products = productApi.listProducts();
71+
72+
// 订单相关操作(示例)
73+
OrderApi orderApi = client.orders();
74+
List<Order> orders = orderApi.listOrders();
75+
```
76+
77+
## API 方法说明
78+
79+
每个实体API都提供以下方法:
80+
81+
- `list{Entity}s()` - 获取所有记录(直接返回列表)
82+
- `list{Entity}s(filter, nestedQuery, sort)` - 带条件查询
83+
- `list{Entity}s(current, pageSize, filter, nestedQuery, sort)` - 分页查询
84+
- `get{Entity}(id)` - 根据ID获取记录
85+
- `create{Entity}(entity)` - 创建记录
86+
- `update{Entity}(id, entity)` - 更新记录
87+
- `patch{Entity}(id, entity)` - 部分更新记录
88+
- `delete{Entity}(id)` - 删除记录
89+
90+
## 通用API
91+
92+
如果需要使用通用API(返回Map类型),可以使用:
93+
94+
```java
95+
RecordsApi recordsApi = client.getRecordsApi();
96+
PageResult<Map<String, Object>> records = recordsApi.listRecords(
97+
"datasource", "model", 1, 10, null, null, null
98+
);
99+
```
100+
101+
## 配置
102+
103+
### 认证
104+
105+
```java
106+
// API Key认证
107+
FlexmodelClient client = FlexmodelClientFactory.createClient(
108+
"http://localhost:8080",
109+
"myDatasource",
110+
"your-api-key"
111+
);
112+
113+
// 用户名密码认证
114+
FlexmodelClient client = FlexmodelClientFactory.createClient(
115+
"http://localhost:8080",
116+
"myDatasource",
117+
"username",
118+
"password"
119+
);
120+
```
121+
122+
### 开发环境
123+
124+
```java
125+
// 使用默认配置(localhost:8080)
126+
FlexmodelClient client = FlexmodelClientFactory.createDefaultClient("myDatasource");
127+
```
128+
129+
## 实体生成
130+
131+
模板包含实体生成器,会根据模型定义自动生成:
132+
- 实体类(如User.java)
133+
- API类(如UserApi.java)
134+
135+
## 示例代码
136+
137+
所有示例代码都位于 `example` 包中:
138+
- `example.User.java` - 用户实体示例
139+
- `example.Product.java` - 产品实体示例
140+
- `example.Order.java` - 订单实体示例
141+
- `example.UserApi.java` - 用户API示例
142+
- `example.ProductApi.java` - 产品API示例
143+
- `example.OrderApi.java` - 订单API示例
144+
- `example.FlexmodelExample.java` - 完整使用示例
145+
146+
## 依赖
147+
148+
确保在pom.xml中设置正确的groupId、artifactId和version占位变量。
8149

9150

Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
# Java SDK 模板使用说明
2+
3+
## 模板结构
4+
5+
```
6+
src/main/templates/java_sdk/
7+
├── src/main/java/${path}/
8+
│ ├── api/
9+
│ │ ├── RecordsApi.java # 通用API(已修改为直接返回数据)
10+
│ │ └── EntityApiGenerator.groovy # 实体API生成器
11+
│ ├── client/
12+
│ │ ├── ApiClient.java # 基础API客户端
13+
│ │ ├── ApiResponse.java # API响应包装类
14+
│ │ ├── FlexmodelClient.java # 主客户端类
15+
│ │ └── FlexmodelClientFactory.java # 客户端工厂
16+
│ ├── entity/
17+
│ │ └── JavaSdkEntityGenerator.groovy # 实体生成器
18+
│ └── example/ # 示例代码包
19+
│ ├── User.java # 用户实体示例
20+
│ ├── Product.java # 产品实体示例
21+
│ ├── Order.java # 订单实体示例
22+
│ ├── UserApi.java # 用户API示例
23+
│ ├── ProductApi.java # 产品API示例
24+
│ ├── OrderApi.java # 订单API示例
25+
│ └── FlexmodelExample.java # 完整使用示例
26+
├── pom.xml # Maven配置
27+
├── README.md # 使用文档
28+
└── TEMPLATE_USAGE.md # 模板使用说明
29+
```
30+
31+
## 主要改进
32+
33+
### 1. 直接实体访问
34+
**之前**
35+
```java
36+
ApiResponse<PageResult<Map<String, Object>>> response = recordsApi.listRecords(...);
37+
List<Map<String, Object>> records = response.getData().getList();
38+
```
39+
40+
**现在**
41+
```java
42+
List<User> users = userApi.listUsers();
43+
```
44+
45+
### 2. 类型安全
46+
- 强类型实体类,编译时类型检查
47+
- 自动补全和重构支持
48+
- 减少运行时错误
49+
50+
### 3. 便捷API
51+
- 每个实体都有专门的API类
52+
- 统一的方法命名规范
53+
- 支持多种查询方式
54+
55+
## 生成器使用
56+
57+
### 实体生成器 (JavaSdkEntityGenerator.groovy)
58+
自动生成实体类,包含:
59+
- 私有字段
60+
- Getter/Setter方法
61+
- 标准JavaBean结构
62+
63+
### API生成器 (EntityApiGenerator.groovy)
64+
自动生成API类,包含:
65+
- CRUD操作方法
66+
- 分页查询支持
67+
- 条件查询支持
68+
- 直接返回实体类型
69+
70+
## 使用流程
71+
72+
1. **配置模板变量**
73+
- `${packageName}` - 包名
74+
- `${path}` - 路径结构
75+
76+
2. **生成实体类**
77+
- 使用 `JavaSdkEntityGenerator` 为每个模型生成实体类
78+
79+
3. **生成API类**
80+
- 使用 `EntityApiGenerator` 为每个实体生成API类
81+
82+
4. **使用客户端**
83+
```java
84+
FlexmodelClient client = FlexmodelClientFactory.createClient(baseUrl, datasource);
85+
// 注意:以下示例方法需要根据实际生成的实体类型进行调整
86+
UserApi userApi = client.users();
87+
List<User> users = userApi.listUsers();
88+
```
89+
90+
## 扩展指南
91+
92+
### 添加新的实体类型
93+
1. 创建实体类(或使用生成器)
94+
2. 创建对应的API类(或使用生成器)
95+
3.`FlexmodelClient` 中添加便捷方法(参考example包中的示例)
96+
97+
### 自定义API方法
98+
在生成的API类中添加业务特定的方法:
99+
```java
100+
public List<User> findActiveUsers() {
101+
return listUsers("status='active'", null, "name asc");
102+
}
103+
```
104+
105+
### 添加认证支持
106+
`ApiClient` 中添加认证逻辑,或在 `FlexmodelClientFactory` 中配置认证参数。
107+
108+
## 最佳实践
109+
110+
1. **使用工厂方法**:优先使用 `FlexmodelClientFactory` 创建客户端
111+
2. **类型安全**:尽量使用强类型API而不是通用API
112+
3. **错误处理**:适当处理API调用异常
113+
4. **资源管理**:合理管理客户端生命周期
114+
5. **缓存策略**:考虑对频繁访问的数据进行缓存
115+
116+
## 注意事项
117+
118+
- 确保所有实体类都有无参构造函数
119+
- API类需要与实体类在同一个包中
120+
- 生成器需要正确的模型定义才能工作
121+
- 客户端工厂方法提供了多种认证方式
122+
- 示例代码位于 `example` 包中,实际使用时需要根据您的实体类型进行调整
123+
- `FlexmodelClient` 中的便捷方法(如 `users()`, `products()` 等)是示例方法,需要根据实际生成的实体类型进行修改

0 commit comments

Comments
 (0)