8 个稳定版本
2.0.4 | 2022年9月23日 |
---|---|
2.0.3 | 2022年5月20日 |
1.0.8 | 2022年5月13日 |
725 在 数据库接口 中排名
每月 下载 28 次
135KB
3.5K SLoC
Summer MyBatis
Summer MyBatis 是一个基于 Rust 语言和 MyBatis 框架的 ORM 框架。它用于简化开发。开发者无需关注复杂的 SQL。他们可以通过动态 SQL 语句进行业务开发。这样可以节省你的时间。此外,它的速度非常快。
功能
- 跨平台支持(Linux、macOS、Windows)
- 无运行时,无垃圾回收
- 强大的灵活条件包装器。
- 支持多种数据库驱动程序(mssql、mysql、postgres、sqlite)。
- 支持与 tokio 的异步操作。
- 结构自动序列化和反序列化。
入门
-
添加 mybatis 依赖
mybatis = { version = "2.0.3"} /// other dependencys serde = { version = "1", features = ["derive"] } rbson = "2.0" tokio = { version = "1.18.2", features = ["full"] }
-
示例
使用 #[mybatis_plus] 宏进行数据表映射
use serde::{Serialize, Deserialize}; #[mybatis_plus] #[derive(Debug, Serialize, Deserialize)] pub struct Books { pub id: Option<String>, pub name: Option<String>, pub types: Option<String> } #[cfg(test)] mod tests { use super::*; use mybatis::mybatis::Mybatis; use mybatis::snowflake::SNOWFLAKE; use mybatis::plus::Mapping; #[tokio::test] async fn save_books() { let mybatis = Mybatis::new(); mybatis.link("mysql://root:passw0rd@localhost:3306/test").await.unwrap(); let id = SNOWFLAKE.generate(); let cat = Books { id: Some(id.to_string()), name: Some("《Daughter of the sea》".to_string()), types: Some("Fairy Tales".to_string()), }; mybatis.save(&cat,&[]).await; } }
如果你不想使用宏,你可以创建一个对应数据库表的结构并映射方法
use mybatis::mybatis_sql::string_util::to_snake_name; use mybatis::plus::MybatisPlus; use serde::{Serialize, Deserialize}; #[derive(Debug, Serialize, Deserialize)] pub struct Pets { pub id: Option<String>, pub name: Option<String>, pub birthday: Option<mybatis::DateTimeNative>, pub delete_flag: Option<i32>, } impl MybatisPlus for Pets { fn table_name() -> String { let type_name = std::any::type_name::<Self>(); let mut name = type_name.to_string(); let names: Vec<&str> = name.split("::").collect(); name = names.get(names.len() - 1).unwrap_or(&"").to_string(); to_snake_name(&name) } fn table_columns() -> String { String::from("id,name,birthday,delete_flag") } } #[cfg(test)] mod tests { use super::*; use mybatis::mybatis::Mybatis; use mybatis::snowflake::SNOWFLAKE; use mybatis::plus::{Skip, Mapping}; /// /// Save a single object /// #[tokio::test] async fn save_pets() { let mybatis = Mybatis::new(); mybatis.link("mysql://root:passw0rd@localhost:3306/test").await.unwrap(); let id = SNOWFLAKE.generate(); let cat = Pets { id: Some(id.to_string()), name: Some("Cindy".to_string()), birthday: Some(mybatis::DateTimeNative::now()), delete_flag: Some(0), }; mybatis.save(&cat,&[]).await; } /// /// Query a single object according to the specified field and return Option<Object> /// #[tokio::test] async fn query_pet_by_name() { let mybatis = Mybatis::new(); mybatis.link("mysql://root:passw0rd@localhost:3306/test").await.unwrap(); let result: Option<Pets> = mybatis.fetch_by_column("name", &"Cindy").await.unwrap(); println!("result: {:?}", result); } }
贡献
到目前为止,我们只实现了 Summer-MyBatis 的一些灵活条件包装器。我们正在开发 XML 文件的映射和 Oracle 数据库驱动程序的支持。如果你有任何兴趣和想法,请提交 PR 或联系我。
我一直在努力工作,寻找各种贡献。期待你的帮助!
依赖关系
~6–26MB
~426K SLoC