# rbatis-wrapper
🚀 一个基于 [rbatis](https://github.com/rbatis/rbatis) 的现代化查询构建器,类似于 MyBatis Plus 的链式查询风格。
[](https://crates.io/crates/rbatis-wrapper)
[](https://docs.rs/rbatis-wrapper)
[](LICENSE)
## ✨ 特性
- 🔗 **链式调用**: 类似 MyBatis Plus 的查询构建器风格
- 📄 **分页支持**: 内置分页功能,支持总数统计
- 🛠 **自定义SQL**: 支持复杂的自定义 SQL 查询
- 🔄 **JOIN查询**: 支持 INNER JOIN、LEFT JOIN、RIGHT JOIN
- 🎯 **类型安全**: 基于泛型的类型安全查询
- ⚡ **异步支持**: 完全支持 Rust async/await
## 📦 安装
在您的 `Cargo.toml` 中添加以下依赖:
```toml
[dependencies]
rbatis-wrapper = "0.1.0"
rbatis = { version = "4.6", features = ["debug_mode"] }
serde = { version = "1.0", features = ["derive"] }
```
## 🚀 快速开始
### 基础设置
```rust
use rbatis::RBatis;
use rbatis_wrapper::QueryWrapper;
use serde::{Deserialize, Serialize};
#[derive(Debug, Serialize, Deserialize)]
struct User {
id: u64,
name: String,
email: Option<String>,
age: u32,
}
// 初始化 RBatis 实例
### 基础查询
```rust
// 查询单个记录
let user = QueryWrapper::new()
.eq("id", 1)
.get_one::<User>(&RB, "users")
.await?;
// 查询多个记录
let users = QueryWrapper::new()
.gt("age", 18)
.like("name", "张")
.order_by("age", true) // true 为升序
.query::<User>(&RB, "users")
.await?;
```
### 条件查询
```rust
let users = QueryWrapper::new()
.eq("status", 1) // 等于
.ne("deleted", 1) // 不等于
.gt("age", 18) // 大于
.lt("age", 60) // 小于
.like("name", "张") // LIKE 模糊查询
.query::<User>(&RB, "users")
.await?;
```
### 分页查询
```rust
let page_result = QueryWrapper::new()
.eq("status", 1)
.order_by("created_at", false) // 按创建时间降序
.page::<User>(&RB, "users", 1, 10) // 第1页,每页10条
.await?;
println!("总记录数: {}", page_result.total);
println!("当前页: {}", page_result.page_no);
println!("总页数: {}", page_result.pages);
println!("是否有下一页: {}", page_result.has_next);
```
### 指定查询字段
```rust
let users = QueryWrapper::new()
.select(vec!["id", "name", "email"])
.eq("status", 1)
.query::<User>(&RB, "users")
.await?;
```
### JOIN 查询
```rust
let results = QueryWrapper::new()
.inner_join("profiles p", "u.id = p.user_id")
.left_join("orders o", "u.id = o.user_id")
.eq("u.status", 1)
.query::<User>(&RB, "users u")
.await?;
```
### 自定义 SQL
```rust
// 自定义查询
let users = QueryWrapper::new()
.custom_sql("SELECT * FROM users WHERE age BETWEEN 18 AND 65")
.eq("status", 1) // 会自动添加到 WHERE 条件
.query::<User>(&RB, "")
.await?;
// 统计查询
let count = QueryWrapper::new()
.custom_sql("SELECT COUNT(*) FROM users")
.eq("status", 1)
.get_one::<u64>(&RB, "")
.await?;
```
### 复杂查询示例
```rust
// 复合条件查询
let mut wrapper = QueryWrapper::new();
wrapper
.limit(20)
.offset(40);
let users = wrapper
.eq("department", "技术部")
.gt("salary", 8000)
.order_by("hire_date", false)
.query::<User>(&RB, "employees")
.await?;
```
## 📖 API 文档
### QueryWrapper 方法
| `new()` | 创建新的查询构建器 | `QueryWrapper::new()` |
| `eq(column, value)` | 等于条件 | `.eq("id", 1)` |
| `ne(column, value)` | 不等于条件 | `.ne("status", 0)` |
| `gt(column, value)` | 大于条件 | `.gt("age", 18)` |
| `lt(column, value)` | 小于条件 | `.lt("price", 100)` |
| `like(column, value)` | LIKE 模糊查询 | `.like("name", "张")` |
| `select(columns)` | 指定查询字段 | `.select(vec!["id", "name"])` |
| `order_by(column, asc)` | 排序 | `.order_by("created_at", false)` |
| `limit(size)` | 限制记录数 | `.limit(10)` |
| `offset(size)` | 偏移量 | `.offset(20)` |
| `inner_join(table, on)` | 内连接 | `.inner_join("profiles", "users.id = profiles.user_id")` |
| `left_join(table, on)` | 左连接 | `.left_join("orders", "users.id = orders.user_id")` |
| `right_join(table, on)` | 右连接 | `.right_join("departments", "users.dept_id = departments.id")` |
| `custom_sql(sql)` | 自定义SQL | `.custom_sql("SELECT * FROM complex_view")` |
| `query<T>(rb, table)` | 执行查询 | `.query::<User>(&RB, "users")` |
| `get_one<T>(rb, table)` | 查询单条记录 | `.get_one::<User>(&RB, "users")` |
| `page<T>(rb, table, page_no, page_size)` | 分页查询 | `.page::<User>(&RB, "users", 1, 10)` |
### Page 结构体
```rust
pub struct Page<T> {
pub records: Vec<T>, // 数据列表
pub total: u64, // 总记录数
pub page_no: u64, // 当前页码
pub page_size: u64, // 每页大小
pub pages: u64, // 总页数
pub has_next: bool, // 是否有下一页
}
```
## 🤝 贡献
欢迎提交 Issue 和 Pull Request!
1. Fork 本项目
2. 创建您的特性分支 (`git checkout -b feature/AmazingFeature`)
3. 提交您的修改 (`git commit -m 'Add some AmazingFeature'`)
4. 推送到分支 (`git push origin feature/AmazingFeature`)
5. 开启一个 Pull Request
## 📄 许可证
本项目采用 MIT 许可证 - 查看 [LICENSE](LICENSE) 文件了解详情。
## 🙏 致谢
- [rbatis](https://github.com/rbatis/rbatis) - 优秀的 Rust ORM 框架
- [MyBatis Plus](https://baomidou.com/) - API 设计灵感来源