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