237 lines
5.2 KiB
Markdown
Raw Normal View History

# 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