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
|