7 个版本
使用旧 Rust 2015
0.3.0 | 2018年11月19日 |
---|---|
0.2.4 | 2018年11月15日 |
0.1.0 | 2018年11月12日 |
#1948 在 数据库接口
每月 22 次下载
9KB
192 行
dbi
基于 Rust 的数据库接口,松散地基于 Java 的 SQL Objects API 的 Jdbi。
使用 Rust 1.30 的过程宏。适用于稳定版(当前)Rust。
目前仅支持 mysql(通过 mysql_async
),但计划支持其他数据库系统。
用法
定义一个符合 params 和所需结果的查询方法的 trait,并在方法属性中传入 SQL 字符串
#[dbi_trait(impl_for(new="UserDao"))]
pub trait UserDaoImpl {
#[sql_query("SELECT * FROM users WHERE id = :id", use_named_params=true)]
fn find_by_id(self, id: i32) -> Box<Future<Item=Option<User>, Error=my::errors::Error> + Send>;
#[sql_query("SELECT * FROM users WHERE id = ?", mapper="|row| { let (id, full_name) = my::from_row_opt(row)?; Ok(User {id, full_name}) }")]
fn find_by_id_faster(self, id: i32) -> Box<Future<Item=Option<User>, Error=my::errors::Error> + Send>;
#[sql_query("SELECT name FROM users")]
fn find_all_names(self) -> Box<futures::Future<Item=Vec<String>, Error=my::errors::Error> + Send>;
#[sql_update("INSERT INTO users (name) VALUES (:name)", use_named_params=true)]
fn create_user_named(self, name: String) -> Box<futures::Future<Item=Option<u64>, Error=my::errors::Error> + Send>;
}
这将创建一个“连接-like”的新类型包装器,您可以使用它
let fut = UserDao(conn).find_by_id(2);
trait 方法必须返回一个类似于 Box<Future<Item=R> ...>
的值,其中 R
是一个 Option<T>
或 Vec<T>
,T 是可以从数据库行中提取的类型。
目前支持以下选项
use_named_params
:使用方法的参数名称而不是参数在格式化查询参数中的位置。mapper
:使用其他表达式映射到结果类型。可以是闭包或其他方法。
计划更多功能,尽管这个库不会提供 Jdbi 所有的选项。
变更日志
-
0.3.0
- 添加
sql_batch
。目前不返回任何值(仅适用于返回Future<Item=()>,...>
的方法)。类似于 Jdbi,每个参数都作为其自己的容器传递(例如,每个命名参数都会有一个看起来像name: Vec<String>
的方法参数)。
- 添加
依赖项
~21MB
~409K SLoC