237 lines
5.2 KiB
Markdown
237 lines
5.2 KiB
Markdown
# Camel MyBatis 用户管理 RESTful API
|
||
|
||
这是一个使用Apache Camel、MyBatis和YAML DSL实现的用户管理RESTful API示例项目。该项目不依赖Spring框架,使用PostgreSQL作为数据库。
|
||
|
||
## 功能特点
|
||
|
||
- 基于Apache Camel实现RESTful API
|
||
- 使用YAML DSL定义Camel路由
|
||
- 使用MyBatis进行数据库访问
|
||
- 支持用户的CRUD操作
|
||
- 支持分页查询和高级复杂搜索
|
||
- 支持多条件组合的高级搜索功能
|
||
- 使用PostgreSQL作为数据库
|
||
|
||
## 技术栈
|
||
|
||
- Apache Camel 3.20.0
|
||
- MyBatis 3.5.11
|
||
- PostgreSQL 42.5.1
|
||
- Jetty (用于HTTP服务器)
|
||
- SLF4J (用于日志记录)
|
||
|
||
## 项目结构
|
||
|
||
```
|
||
src/main/java/com/example/
|
||
├── Application.java # 应用程序入口
|
||
├── model/ # 数据模型
|
||
│ ├── User.java # 用户实体类
|
||
│ ├── PageRequest.java # 分页请求
|
||
│ ├── PageResponse.java # 分页响应
|
||
│ └── AdvancedSearchRequest.java # 高级搜索请求
|
||
├── mapper/ # MyBatis映射器
|
||
│ └── UserMapper.java # 用户数据访问接口
|
||
├── service/ # 业务服务
|
||
│ └── UserService.java # 用户服务
|
||
└── processor/ # Camel处理器
|
||
└── UserProcessor.java # 用户处理器
|
||
|
||
src/main/resources/
|
||
├── mybatis-config.xml # MyBatis配置
|
||
├── mybatis/ # MyBatis映射文件
|
||
│ └── UserMapper.xml # 用户映射XML
|
||
├── camel/ # Camel配置
|
||
│ └── routes.yaml # YAML路由定义
|
||
└── db/ # 数据库脚本
|
||
└── init.sql # 初始化SQL脚本
|
||
```
|
||
|
||
## 安装和运行
|
||
|
||
### 前提条件
|
||
|
||
- JDK 11或更高版本
|
||
- Maven 3.6或更高版本
|
||
- PostgreSQL 12或更高版本
|
||
|
||
### 数据库设置
|
||
|
||
1. 安装并启动PostgreSQL数据库
|
||
2. 执行初始化SQL脚本:
|
||
|
||
```bash
|
||
psql -U postgres -f src/main/resources/db/init.sql
|
||
```
|
||
|
||
### 构建和运行
|
||
|
||
1. 克隆项目
|
||
2. 使用Maven构建项目:
|
||
|
||
```bash
|
||
mvn clean package
|
||
```
|
||
|
||
3. 运行应用程序:
|
||
|
||
```bash
|
||
java -jar target/camel-mybatis-user-api-1.0-SNAPSHOT.jar
|
||
```
|
||
|
||
应用程序将在 http://localhost:8080/api 上提供服务。
|
||
|
||
## API端点
|
||
|
||
### 用户管理
|
||
|
||
- `GET /api/users` - 获取所有用户
|
||
- `POST /api/users/search` - 分页查询用户
|
||
- `POST /api/users/advanced-search` - 高级搜索用户
|
||
- `POST /api/users` - 创建新用户
|
||
- `GET /api/users/{id}` - 获取指定ID的用户
|
||
- `PUT /api/users/{id}` - 更新指定ID的用户
|
||
- `DELETE /api/users/{id}` - 删除指定ID的用户
|
||
|
||
### 分页查询示例
|
||
|
||
请求:
|
||
|
||
```json
|
||
POST /api/users/search
|
||
Content-Type: application/json
|
||
|
||
{
|
||
"page": 1,
|
||
"size": 10,
|
||
"filters": {
|
||
"username": "user",
|
||
"email": "example.com",
|
||
"active": true
|
||
},
|
||
"sortField": "createdAt",
|
||
"sortOrder": "desc"
|
||
}
|
||
```
|
||
|
||
响应:
|
||
|
||
```json
|
||
{
|
||
"page": 1,
|
||
"size": 10,
|
||
"total": 42,
|
||
"data": [
|
||
{
|
||
"id": 1,
|
||
"username": "admin",
|
||
"email": "admin@example.com",
|
||
"phone": "13800138000",
|
||
"fullName": "管理员",
|
||
"createdAt": "2023-01-01T12:00:00",
|
||
"updatedAt": "2023-01-01T12:00:00",
|
||
"active": true
|
||
},
|
||
// ...更多用户
|
||
]
|
||
}
|
||
```
|
||
|
||
### 高级搜索示例
|
||
|
||
请求:
|
||
|
||
```json
|
||
POST /api/users/advanced-search
|
||
Content-Type: application/json
|
||
|
||
{
|
||
"page": 1,
|
||
"size": 10,
|
||
"criteria": [
|
||
{
|
||
"field": "username",
|
||
"operator": "LIKE",
|
||
"value": "user"
|
||
},
|
||
{
|
||
"field": "active",
|
||
"operator": "EQ",
|
||
"value": true,
|
||
"logicalOperator": "AND"
|
||
},
|
||
{
|
||
"logicalOperator": "OR",
|
||
"subCriteria": [
|
||
{
|
||
"field": "email",
|
||
"operator": "LIKE",
|
||
"value": "gmail.com"
|
||
},
|
||
{
|
||
"field": "email",
|
||
"operator": "LIKE",
|
||
"value": "example.com",
|
||
"logicalOperator": "OR"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"field": "createdAt",
|
||
"operator": "BETWEEN",
|
||
"value": ["2023-01-01T00:00:00", "2023-12-31T23:59:59"],
|
||
"logicalOperator": "AND"
|
||
}
|
||
],
|
||
"sortField": "createdAt",
|
||
"sortOrder": "desc"
|
||
}
|
||
```
|
||
|
||
响应:
|
||
|
||
```json
|
||
{
|
||
"page": 1,
|
||
"size": 10,
|
||
"total": 15,
|
||
"data": [
|
||
{
|
||
"id": 5,
|
||
"username": "user5",
|
||
"email": "user5@example.com",
|
||
"phone": "13800138005",
|
||
"fullName": "用户五",
|
||
"createdAt": "2023-05-15T10:30:00",
|
||
"updatedAt": "2023-05-15T10:30:00",
|
||
"active": true
|
||
},
|
||
// ...更多用户
|
||
]
|
||
}
|
||
```
|
||
|
||
#### 支持的操作符
|
||
|
||
- `EQ` - 等于
|
||
- `NEQ` - 不等于
|
||
- `LIKE` - 包含
|
||
- `START` - 开始于
|
||
- `END` - 结束于
|
||
- `GT` - 大于
|
||
- `GTE` - 大于等于
|
||
- `LT` - 小于
|
||
- `LTE` - 小于等于
|
||
- `BETWEEN` - 在...之间
|
||
- `NULL` - 为空
|
||
- `NOT_NULL` - 不为空
|
||
- `IN` - 在列表中
|
||
|
||
#### 逻辑操作符
|
||
|
||
- `AND` - 与
|
||
- `OR` - 或
|
||
|
||
## 许可证
|
||
|
||
MIT |