22个版本 (4个破坏性版本)
0.5.2 | 2024年7月19日 |
---|---|
0.5.1 | 2024年7月4日 |
0.4.3 | 2024年6月28日 |
0.3.3 | 2024年6月5日 |
0.1.1 | 2024年4月18日 |
#692 in 数据库接口
每月173次下载
用于 geekorm-cli
195KB
3K SLoC
概述
GeekORM 是一个简单的 对象关系映射,用于增强你的 Rust 开发。
✨ 功能
- 关注简洁性
- 依靠Derive宏为你的struct生成代码
- 使用
Table
- 使用
Data
- 使用
- 动态构建查询
Select
、Create
、Update
和Insert
查询
- 广泛的crate功能
- 字段属性助手
foreign_key
:设置连接的外键rand
:生成随机字符串(设置长度、设置前缀、设置环境)hash 或
:生成存储密码的安全哈希(设置算法)password
- 支持后端
- 文档
📦 使用方法
您可以从 crates.io 安装库
cargo add geekorm
手册 - GitHub
cargo install --git https://github.com/42ByteLabs/geekorm
🏃 入门
安装 geekorm
后,您可以开始使用如下 derive 宏:
use anyhow::Result;
use geekorm::prelude::*;
#[derive(Table, Debug, Default, serde::Serialize, serde::Deserialize)]
struct Users {
#[geekorm(primary_key, auto_increment)]
id: PrimaryKeyInteger,
#[geekorm(unique)]
username: String,
#[geekorm(hash)]
password: String,
#[geekorm(new = "UserType::User")]
user_type: UserType,
#[geekorm(new = "chrono::Utc::now()")]
created_at: chrono::DateTime<chrono::Utc>,
postcode: Option<String>,
}
#[derive(Data, Debug, Default, Clone)]
enum UserType {
Admin,
#[default]
User,
}
#[tokio::main]
async fn main() -> Result<()> {
// Setup the database and connection
let db = libsql::Builder::new_local(":memory:").build().await?;
let connection = db.connect()?;
// Create the table in the database
Users::create_table(&connection).await?;
// Creating a new User
let mut user = Users::new("GeekMasher", "ThisIsNotMyPassword");
// Saving the new User in the database
user.save(&connection).await?;
// Print the Primary Key value set by the database (auto_increment)
println!("User ID: {:?}", user.id);
// Updating the User
user.user_type = UserType::Admin;
user.update(&connection).await?;
// Fetch the Admin Users
let admin_users = Users::fetch_by_user_type(&connection, UserType::Admin).await?;
println!("Admin Users: {:?}", admin_users);
// Helper functions built right into the struct by GeekORM
user.hash_password("ThisIsStillNotMyPassword")?;
// Go back to basics and build your own queries dynamically using
// the QueryBuilder built into GeekORM
let query = Users::query_select()
.where_eq("username", "GeekMasher")
.order_by("id", geekorm::QueryOrder::Desc)
.limit(1)
.build()?;
// Execute the query and return the results
let users = Users::query(&connection, query).await?;
println!("Users: {:?}", users);
Ok(())
}
🏄 创建功能
GeekORM 支持许多可选择的特性。您可以通过以下方式添加特性:使用 cargo add geekorm -F all
或直接在您的 Cargo.toml
文件中添加它们。
all
:启用所有主要稳定功能new
: 生成Table::new(...)
函数helpers
: 生成多个辅助函数- 选择
Table::select_by_primary_key()
- 选择列
Table::select_by_{field}()
- 选择
rand
: 支持生成随机字符串hash
: 支持生成密码哈希- 后端
libsql
: 添加 LibSQL 后端支持
🧑🤝🧑 维护者 / 贡献者
Mathew Payne 💻 代码 审阅的 Pull Requests |
Cale 🎨 |
🦸 支持
如果有错误或功能请求,请创建 GitHub Issues。
本项目使用 语义版本化 (v2),在主要版本发布时,将发生重大变化。
📓 许可证
本项目采用 MIT 开源许可证。请参阅 MIT 以获取完整条款。
依赖项
~1.7–3.5MB
~64K SLoC