30 个版本 (1 个稳定版)
2.0.0 | 2024 年 4 月 3 日 |
---|---|
0.11.0 | 2023 年 10 月 30 日 |
0.10.0 | 2023 年 10 月 30 日 |
0.8.10 | 2022 年 12 月 1 日 |
0.8.9 | 2022 年 11 月 26 日 |
#10 在 #bases
每月 101 次下载
用于 dysql
300KB
7K SLoC
关于 Dysql
Dysql 是一个高性能的 Rust SQL 工具库和 ORM 库。一个异步、纯 Rust SQL crate,具有编译时动态 SQL 功能。是一个高性能轻量级的基于 Rust 的异步 ORM 库,提供编译时的动态 SQL。
它基于 sqlx、rbac、tokio-postgres 等底层技术,提供了一个类似于 ibatis 的动态 SQL 模板语言,用于生成动态 SQL,支持 CRUD 以及分页。
该模板语言的使用规则如下
dysql_macro_name!(| conn_or_tran, dto | [-> return_type ] { ...sql string... });
实例
Cargo.toml
[dependencies]
dysql = "2"
sqlx = { version = "0.7", features = [ "runtime-tokio-native-tls" , "postgres" ] }
tokio = { version = "1.0", features = ["full"] }
main.rs
use std::error::Error;
use dysql::{PageDto, SortModel, sql, fetch_one, insert, fetch_scalar, execute, page, fetch_all, Value};
use sqlx::{Pool, MySql, mysql::MySqlPoolOptions};
use dysql::Content;
use sqlx::FromRow;
use crate::common::{UserDto, User};
#[derive(Content, Clone)]
pub struct UserDto {
pub id: Option<i64>,
pub name: Option<String>,
pub age: Option<i32>,
pub id_rng: Option<Vec<i32>>,
}
#[allow(dead_code)]
impl UserDto {
pub fn new(id: Option<i64>, name: Option<String>, age: Option<i32>, id_rng: Option<Vec<i32>>) -> Self {
Self { id, name, age, id_rng }
}
}
#[allow(dead_code)]
#[derive(Debug, PartialEq)]
#[derive(FromRow)]
pub struct User {
pub id: i64,
pub name: Option<String>,
pub age: Option<i32>,
}
pub async fn connect_mysql_db() -> Pool<MySql> {
let conn = MySqlPoolOptions::new()
.max_connections(5)
.connect("mysql://root:[email protected]/my_database").await.unwrap();
conn
}
#[tokio::main]
async fn main() {
let conn = connect_mysql_db().await;
let dto = UserDto{ id: None, name: None, age: Some(13) , id_rng: None };
let rst = fetch_all!(|&conn, &dto| -> User {
r#"SELECT * FROM test_user
WHERE 1 = 1
{{#name}}AND name = :name{{/name}}
{{#age}}AND age > :age{{/age}}
ORDER BY id"#
}).unwrap();
assert_eq!(7, rst.len());
let rst = fetch_all!(|&conn| -> User {
r#"SELECT * FROM test_user"#
}).unwrap();
rst!("{}", rst.len());
}
许可证
Dysql 是免费软件,根据 Apache License 2.0 许可发布。请参阅 LICENSE。
依赖
~5–13MB
~124K SLoC