3 个版本

0.0.7 2024 年 8 月 21 日
0.0.6 2024 年 8 月 17 日
0.0.4 2024 年 8 月 7 日

#555数据库接口

Download history 115/week @ 2024-08-05 146/week @ 2024-08-12

每月 261 次下载

MIT 许可证

34KB
644 代码行

crates.io Documentation

依赖

spring-sea-orm = { version = "0.0.7", features = ["postgres"] }
sea-orm = { version = "1.0" }          # Mainly to adapt to the entity code generated by sea-orm-cli

您可以用 postgresmysqlsqlite 功能来选择合适的数据库驱动。

配置项

[sea-orm]
uri = "postgres://root:123456@localhost:5432/pg_db" # Database address
min_connections = 1        # Minimum number of connections in the connection pool, the default value is 1
max_connections = 10       # Maximum number of connections in the connection pool, the default value is 10
acquire_timeout = 30000    # Connection timeout, in milliseconds, default 30s
idle_timeout = 600000      # Connection idle time, in milliseconds, default 10min
connect_timeout = 1800000  # Maximum connection survival time, in milliseconds, default 30min
enable_logging = true      # Print sql log

组件

配置上述配置项后,插件将自动注册一个 DbConn 连接池对象。此对象是 sea_orm::DbConn 的别名。

pub type DbConn = sea_orm::DbConn;

提取插件注册的组件

SeaOrmPlugin 插件自动为我们注册了一个连接池组件。我们可以使用 Component 从 AppState 中提取这个连接池。 Component 是 axum 的 extractor

use spring::get;
use spring_sqlx::{sqlx::{self, Row}, ConnectPool};
use spring_web::extractor::Component;
use spring_web::error::Result;
use anyhow::Context;

#[get("/:id")]
async fn get_todo_list(
    Component(db): Component<DbConn>,
    Path(id): Path<i32>
) -> Result<String> {
    let rows = TodoItem::find()
        .filter(todo_item::Column::ListId.eq(id))
        .all(&db)
        .await
        .context("query todo list failed")?;
    Ok(Json(rows))
}

请参阅完整的代码 sea-orm-example

依赖

~18–35MB
~547K SLoC